アーカイブ

2010 年 5 月 14 日 のアーカイブ

XMEGA-A4(9)

2010 年 5 月 14 日 コメントはありません

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

と、いうことで。
つづく

カテゴリー: Project, 電子工作 タグ: