P/ECE研究室〜S1C33分室
* Sun Jun 02 22:00:00 JST 2002 Naoyuki Sawa
今回は、CPU・メインメモリ・高速DMAC・シリアルコントローラが協調して、
LCDCにコマンドを送り込む様子を、図にしてみました。
サンプルとして、グレイスケールレジスタ変更コマンドを取り上げます。
※シリアルコントローラや高速DMACのセットアップなど、細部は省きました。
※注意:S1C33のシリアルコントローラは、ビット0〜7の順で送出しますが、
※ LCDCは、ビット7〜0の順で送られてくることを想定しています。
※ シリアルコントローラに書き込む前、メインメモリ上にバイト列を用意する時点で、
※ 各バイトのビット並びを反転しておく必要があります。(図では省略しました)
通常、色番号と表示色の対応は、次のようになっています。
0: 白
1: 明るい灰色
2: 暗い灰色
3: 黒
この対応は、LCDCのグレイスケールレジスタを操作して、自由に変更することができます。
例えば、色番号3を黒から白に変更するには、次のようなコマンドをLCDCに送り込みます。
0x8E, 0x00, 0x8F, 0x00
上記4バイトのコマンドをLCDCに送り込む手順は、次のようなものです。
1.まずCPUが、コマンドのバイト列をメインメモリ上に用意します。
CPU−−+−−+−−+−−+
↓ ↓ ↓ ↓
+−−+−−+−−+−−+
メインメモリ |8E|00|8F|00|
+−−+−−+−−+−−+
2.CPUが、最初のコマンドバイトをシリアルコントローラに書き込みます。
もう、CPUはやることがなくなったので、シリアルコントローラを監視して待ちます(手順7参照)。
+−−+−−+−−+−−+
メインメモリ |8E|00|8F|00|
+−−+−−+−−+−−+
|
CPU +−−+
↓
+−−+−−+
シリアルコントローラ |8E| |
+−−+−−+
3.シリアルコントローラは、書き込まれたバイトをビット単位に分解し、LCDCに送信します。
+−−+−−+−−+−−+
メインメモリ |8E|00|8F|00|
+−−+−−+−−+−−+
|
+−−+
↓
+−−+−−+ +−−−−+
シリアルコントローラ | |8E|−01110001→|LCDC|
+−−+−−+ +−−−−+
4.シリアルコントローラが送信を開始すると、すぐに次のバイトの受け付けができます。
シリアルコントローラが次のバイトを受け付けられる状態になると、
高速DMACが、メインメモリから次のバイトをシリアルコントローラに書き込みます。
+−−+−−+−−+−−+
メインメモリ |8E|00|8F|00|
+−−+−−+−−+−−+
|
高速DMAC |
↓
+−−+−−+ +−−−−+
シリアルコントローラ |00|8E|−01110001→|LCDC|
+−−+−−+ +−−−−+
5.シリアルコントローラが、CPUによって書き込まれた最初のバイトを送信完了したら、
自動的に、先ほど高速DMACによって書き込まれた二つ目のバイトの送信を開始します。
また、シリアルコントローラは次のバイトの受け付けが可能になるので、
高速DMACが、メインメモリから次のバイトをシリアルコントローラに書き込みます。
+−−+−−+−−+−−+
メインメモリ |8E|00|8F|00|
+−−+−−+−−+−−+
|
高速DMAC +−+
↓
+−−+−−+ +−−−−+
シリアルコントローラ |8F|00|−00000000→|LCDC|
+−−+−−+ +−−−−+
6.この繰り返しで、高速DMACが最後のバイトまでシリアルコントローラに書き込むと、
もう、高速DMACはやることがなくなったので、高速DMACは停止します。
+−−+−−+−−+−−+
メインメモリ |8E|00|8F|00|
+−−+−−+−−+−−+
|
高速DMAC +−−−−+
↓
+−−+−−+ +−−−−+
シリアルコントローラ |00|8F|−11110001→|LCDC|
+−−+−−+ +−−−−+
7.CPUはシリアルコントローラの状態を監視して、最後のバイトが送信完了するまで待っています。
CPU
|
監視|
↓ +−−+−−+ +−−−−+
シリアルコントローラ | |00|−00000000→|LCDC|
+−−+−−+ +−−−−+
8.完了です。
CPU
|
監視|
↓ +−−+−−+ +−−−−+
シリアルコントローラ | | |−−−−−−−−−→|LCDC|
+−−+−−+ +−−−−+
ちょっと短いですが、今回はここまでです。
次回は、シリアルコントローラとLCDCのやりとりの部分に注目してみたいと思います。
(続きます...)
nsawa@piece-me.org