XMEGA-A4(9)
LCDの表示は置いといて、タッチスクリーンを。
ハードウェア的には抵抗膜4線式スクリーン。
これをタッチセンサーのコントローラーであるADS7843でA/D変換し
SPI接続でホスト側で読み出す。
コントローラーの機能としては、タッチされたら通知するような割り込み用端子があるが
それは今回は使わない方向で。ついでに、BUSYの通知も使わない。
制御としては任意のタイミングで、その時点の値を読んで判断する。
ちなみに、コントローラーの世代的には古い部類らしい。
が、基本的に最近のものも制御自体は変わらない。
で、XMEGAのSPIモジュール。
なんか、設定すべきレジスタが1個しか・・・ない?
あとは送信・受信兼用のデータレジスタと、
割り込みステータス用のレジスタがあるだけ・・・・?
かなりシンプルね。
この場合、送受信の末端はひとつの関数で、
データを書いた後で割り込みフラグが立つのを確認、
その後にデータを取得すればいいのかな。
[code lang=”cpp”]
unsigned char SPIDCtrl_RW( unsigned char byte )
{
SPID.DATA = byte;
while( !(SPID.STATUS & SPI_IF_bm) );
byte = SPID.DATA;
return byte;
}
[/code]
このとき取得するデータは一つ前の送信に対する返答だってこと。
だから、コマンドの返事が欲しければ、ダミーで0xFFを送る。
そういえば、こんな一文が。
DMA support on the SPI module is only available in Slave mode.
・・・・DMAはSPI-スレーブの時しか支援しないよ・・・って
みんなSDカードをSPI接続で使うときにDMAしたくて仕方ないのに
この一文は堪える。
やりたかったらUSARTのSPIモードを使えと。
かなりの罠だww
と、いうことで。
つづく