構想編7
DACユニットのソフトへの組み込みの検討を行います。
DACユニットソフトウェア構成
リモコン受信処理を組み込むDACユニットのソフトウェアの構成を確認します。図は現行のソフトウェアのジェネラルフローチャートです。
大きく3つの部分で構成されています。イニシャル処理は、必要な設定とデモ表示を行います。キー検出処理は、3つあるキーの検出のみを行います。キー処理はキー検出処理で確定したキーオン情報に従ってDAC ICへのコマンド発行および表示処理を行います。
リモコン受信処理組み込み
現状のDACユニットソフトウェアのジェネラルフローチャートに赤外線リモコン受信処理を組み込みます。
Main loop中には、従来の処理に影響を与えないように独立してIR処理を追加しました。従来のキー処理に相当します。それ以外に、外部割り込みのInt0処理でリモコンの受信処理を行います。2重受信防止用のタイマー処理の為にタイマー割り込みMsTimer2処理も追加しました。この処理の中でInt0を有効にしているわけではないので、わざわざMsTimer2を使わずとも同様の機能実装ができる事に気がつきましたが、現時点ではこのままとします。それでは変更した処理のフローを整理します。最初はイニシャル処理です。
ここではMsTimer2のライブラリ登録とIR受信の為の入力ポート設定およびデファインを行っています。次は追加した外部割り込みInt0処理です。
処理の最初でInt0割り込みを無効にして、Int0の多重割り込みを禁止します。Leader検出をしたら32bitの受信処理を行い、カスタムコードチェックを行ってキーコードを確定します。キーコードの受け渡しはグローバル変数で行います。次はMsTimer2処理です。
Int0が有効の場合は処理をぬけます。無効の場合は、130msのウエイトを置いてInt0有効化フラグをセットします。最後はIR処理です。有効なIRコードがある場合、ATT処理と表示処理を行います。Int0が無効の場合は、130msウエイトの状況を判断してカウントアップした場合は、Int0を有効に戻します。
DACユニットソフトウェア移植準備
移植にあたり、キー処理フロー中のATT処理を事前に確認します。写真が現行ソースの抜粋です。
先頭のKTSTはキーステータスでATTキーが押された事が確定すると0x64になります。AT変数に現状のDAC IC用のATTパラメータが保存されていて、1回押すごとに値を-2しています。DAC ICへのコマンド発行は関数化されています。その下はLCD表示用に処理がべた書きされています。この処理はIR処理でも行うため、関数化します。
byteデータを引数とするAT_disp関数です。この関数を使う事でMain処理では、この関数をコールするだけですみます。
続いて、リモコンサンプルコードで取得したキーコードをMain処理への受け渡しできるようにします。リモコン処理は割り込み処理なので、キーコードをグローバル変数で受け渡しします。下記が現状のリモコンサンプルコードです。
キーコードはローカル変数keyの格納されています。事前にkeyをグローバル変数宣言して使用します。
具体的にはget_ir_key関数を使ってキーコードを格納するkey変数のint宣言を削除しています。そのかわりに、ソースの先頭でint key;でグローバル変数宣言を行っています。次回は移植を行います。
つづく(構想編8)