I2Cが、何とか動作するようになったので、次はSPI通信。
RL78/G13は、SAU(シリアル・アレイ・ユニット)で、SPI準拠の通信も
扱える(CSIと呼ぶらしい)、これなら、SDカードアクセスを行なっても、アクセ
ス速度が足りないとかは無さそうだし、DMA転送も使えるはず。
※以前にR8CでSPI通信を行なった時は、ソフトウェアーのみで実装した、その時
は、SDカードのアクセスでは、11.05KHzの波形ファイルの再生が限界だった。
一応R8CにもシリアルユニットをSPI通信で使うモードが用意されてはいるものの、
そうすると、シリアル通信が出来なくなってしまう。
RL78/G13では、シリアル・アレイは6チャネルもあり、潤沢に使える。
ただ、CSIを実装していて気がついたが、最高速度は16MHzである上に、それは、
CSI0だけで、他は8MHzが上限のようだ・・
これは、かなり痛い・・
現在UARTには、チャネル0、1を宛てているので、これを、別に宛てて、最高速度
が出せるチャネルは、CSI用にする必要があるようだ・・
それでは、早速、CSI用のマネージャーを作成開始。
UARTと違うのは、UARTでは、基本、送信と受信は全二重(別チャネル)で動く
ので、SAUは2チャンネル必要だけど、CSIでは、1チャネルで、出力、入力を兼
ねる点。
簡単なテストプログラムを作成して、出力をオシロスコープで確認してみたもの、パル
スが出力されない・・・
随分時間をかけて、調べた結果、SAUのデータレジスターの実アドレスだけが、イレ
ギュラーな飛び方をしている事を発見、それを修正したら、SO10から、パルスが出
るようになった。
FFF10H, FFF11H(SDR00), FFF12H, FFF13H(SDR01) FFF44H, FFF45H(SDR02), FFF46H, FFF47H(SDR03) FFF48H, FFF49H(SDR10), FFF4AH, FFF4BH(SDR11) FFF14H, FFF15H(SDR12), FFF16H, FFF17H(SDR13)
※「SO10」は、「SDR02」を使う。
まず、SDカードの前に、もっとも簡単なLCDを繋いでみた。
大型STN液晶モジュール(128x64/SPI) [LCD12864B11-2P]
RAMが潤沢にあるので、128X64のグラフィックスも余裕で扱える~
ビットマップのLCDを高速に、そして柔軟に扱うには、どうしてもフレームバッファ
が不可欠で、表示サイズと同等のメモリーが必要となる。
この場合、1Kバイトの領域が必要。
通常、アプリケーションは、フレームバッファを全クリアして、オブジェクトをメモリ
ー上に描画する、そして、最後の描画が終わったら、全ての内容を、LCDに送る。
こうする事で、柔軟な描画が出来る。
これが、俗に言う「フレームバッファ方式」と呼ぶもので、他の考え方として、書き換
えが起こったら、その領域だけを選択的に書き換える方法があるが、液晶モジュールと
のコマンドのやりとりが複雑になり、書き換える領域が大きいほど、描画時間が多くか
かってしまう、また、書き換えるタイミングも個別に管理しなくてはならない。
フレームバッファ方式の場合、1秒に60回ほどの書き換えが望ましいが、STNの液
晶は、応答が速く無いので、秒間15枚も書き換えれば、十分かもしれない。
この方式は、昔からゲーム機で広く使われている方式。
能書きはこのくらいで~
-----
先日、Aitendoで購入したLCDは、コントローラーは、「ST7565R」と
あるので、ネットを探して、「ST7565」のドライバーを入手した。
以前にR8Cでも「ST7567」の液晶を扱ったので、その時に書いたドライバーは
あるが、別のソースを精査して、もう一度ドライバーを見直してみた。
※少し、動作が怪しい部分があった為もある。
ソフトを実装して、動かしてみたが、ウンともスンとも動かない・・
SCI関係のバグなのかもと思い、クロックとデータの関係など、色々確認してみたが、
問題無い、悩んだ末、組み立てる前から、基板のコネクターが気になっていたので、良
く調べてみると・・・
何と、ケーブルを差し込む上下が逆になっている・・・
ホームページの写真ではストレートに接続しているが、これでは、機能しない、180
度返さないと接触しない。
とりあえず、動作はしたのだが、非常に後味が悪い・・・
※メールで交換、返品を申し出たのだが、どうなるやら・・