carcon999のブログ

12年間Y!ブログの記載を移行しました。電子工作関連の記事が多いです。

ビット・バンディング

私は、初めて言葉を知ったのですが、『ビット・バンディング』というのが、今回のARM(Cortex-M3)で利用できるそうです。(DWM 5月号 P67)実は、これが非常に液晶駆動に有効な予感です。

マイコンのプログラミングで、特定の端子1bitをHIとする場合、
(以下の例では、16bitのP0の最下位bitをコントロールする)
P0 |= 0x0001;
のように記述すると思います。

これがアセンブラレベルに展開されると、
A ← P0 ; P0の値を読み込みAに入れる
A ← A | 0x0001 ; 読み取った値と0x0001でORした値をAに入れる
P0 ← A ; AをP0に出力する。
※イメージなので、突っ込み不可です。
のような、命令に展開されます。(要は、複数の命令に展開されることが言いたい。)

つまり、他のビットに迷惑かけないようにするために、一度読み出しを行って、編集して、書き戻す。
という操作が必要になります。

これが、『ビット・バンディング』という機構では、
0xFFFF0000 : P0のbit0
0xFFFF0001 : P0のbit1
0xFFFF0002 : P0のbit2
0xFFFF0003 : P0のbit3
     :
※アドレスも適当です。

というように、特定のアドレスに、1bitを割り当てることができるために、読み込みと編集が不要になるので、1命令で1bitを操作することができるということみたいです。
なぜ、液晶のドライブに有効そうなのかというと、高いクロックを出すために、1命令で実行できるこの命令は、非常に有効だと考えています。今日は、大きな収穫がありました。

実際にプログラミングして、今後は確認してゆきます。