開発のヒント

CPU

ビットバンド・アクセスの注意点

Cortex®-M3/M4には、Read-Modify-Write(RMW)処理を1命令で行うことができる、ビットバンドという便利な機能があります。ビットバンド・アクセスでは、処理したい1bitにアクセスするために専用のエイリアス・アドレスが割り当てられます。そのアドレスに対してストア命令(STRB、STRH、STRなど)行うことで、対象のbitだけをセットまたはクリアすることができます。

しかしその処理の裏では、対象の1bitを含むバイト / ハーフワード / ワードの範囲にたいしてRMW処理が行われています。そのため、ペリフェラル・レジスタへビットバンド・アクセスする際、特に、そのアクセス範囲に特殊な属性を持つbitが含まれている場合には、注意が必要です。

例えば、対象範囲にrc_w1属性を持つbitが含まれており、かつ、そのbitが1にセットされていた場合です。この範囲にビットバンドでアクセスすると、RMW処理の結果1が読まれ1が書き戻されますので、rc_w1属性により0にクリアされてしまいます。もし、このbitの状態によりなんらかの処理が必要である場合、その後の動作で問題を引き起こしてしまいます。

過去の開発のヒントはこちら