バグ潰しに行き詰まりを感じて、再度FT800に逃避中。
次の段階としてタッチパネルからの入力を実験する予定ですが、その事前準備としてまずはFT800のINT_Nをマイコンとつないでおくことにしました。FTDIのデモでは割り込み要求であるINT_Nを使っていないので、この端子は未配線でした。しかしながら、デモを走らせてみると、SAM3Sがずいぶんと暖かくなります。デモでは、タッチパネルを監視するのにポーリングを繰り返しているために、CPUが走りっぱなしになっているんですね。割り込み使えば、タッチを検出するまではCPUは寝て待つことができます。また、FT800のコマンドキューが空になったかどうかもレジスタをポーリングして調べているようですが、これも割り込み待ちに変えられそうです。今回は、FT800(Connet EVE)とSAM3Sは次のようにつないでいます。
PD_Nはパワーダウンの制御用ですが、本格的に使うまではHighレベルに固定のままでいいでしょう。これだけの結線で、LCDへの描画だけでなく、タッチパネルからの入力も拾えるので端子数の少ないマイコンでも手軽にタッチパネル付きLCDを使えます。
まずは、サンプルデモへの変更点が少ないコマンドキューの空検出処理を割り込みに変更してみましたが、ここでちょっとはまりました。この状態はREG_INT_FLAGSのCMDEMPTYビットで検出できますが、このビットはキューが空になった時にセットされ、REG_INT_FLAGSの読み出しでクリアされてしまいます。そのため、いったん読み出してしまうと、キューは空であっても、ビットはリセットされたままになります。ついついUSARTのTXRDYビットと同じような振る舞いを期待していて、割り込みを待ち続けてしまっていました。
次の段階としてタッチパネルからの入力を実験する予定ですが、その事前準備としてまずはFT800のINT_Nをマイコンとつないでおくことにしました。FTDIのデモでは割り込み要求であるINT_Nを使っていないので、この端子は未配線でした。しかしながら、デモを走らせてみると、SAM3Sがずいぶんと暖かくなります。デモでは、タッチパネルを監視するのにポーリングを繰り返しているために、CPUが走りっぱなしになっているんですね。割り込み使えば、タッチを検出するまではCPUは寝て待つことができます。また、FT800のコマンドキューが空になったかどうかもレジスタをポーリングして調べているようですが、これも割り込み待ちに変えられそうです。今回は、FT800(Connet EVE)とSAM3Sは次のようにつないでいます。
PD_Nはパワーダウンの制御用ですが、本格的に使うまではHighレベルに固定のままでいいでしょう。これだけの結線で、LCDへの描画だけでなく、タッチパネルからの入力も拾えるので端子数の少ないマイコンでも手軽にタッチパネル付きLCDを使えます。
まずは、サンプルデモへの変更点が少ないコマンドキューの空検出処理を割り込みに変更してみましたが、ここでちょっとはまりました。この状態はREG_INT_FLAGSのCMDEMPTYビットで検出できますが、このビットはキューが空になった時にセットされ、REG_INT_FLAGSの読み出しでクリアされてしまいます。そのため、いったん読み出してしまうと、キューは空であっても、ビットはリセットされたままになります。ついついUSARTのTXRDYビットと同じような振る舞いを期待していて、割り込みを待ち続けてしまっていました。