簡単ファイルシステム評価ボード ALFATを使ってみよう! 其の六 [ALFAT]
※注意!
これからこのブログを書きながら最終的なハードウエアデバック、アプリケーションソフトウエアの構築に入ります。なので、写真や文章と実際の製品では異なる部分が出る可能性が有ります。その点をご了承下さい。
動作確認編3
前回までは簡単なプログラムを作成し、LCDに適当なメッセージを表示する所までやりました。
今回はALFATのコマンドラインインタフェース機能にアクセスするべく、H8のシリアルとIC2を連結して、H8経由でALFATのユーザーインタフェースとやり取りするまでを行おうと思っていたのですが、作業開始時間が大きく遅れ、シリアルでのエコーバックまでしか行えませんでした。ALFATのユーザーインタフェースとの接続は次回に持越しです。
もっとも、確実に進める為には一つ一つの機能を確認しながら実現していかなければならないので、今回はシリアルを受信に関しては割り込みを使いながらプログラムを作って行きます。
シリアル通信定番のエコーバックです。
以下がmainルーチンです。詳細の関数に関しては説明を省きます。
void main(void) { int c; /*SCI3の初期化 38400bpsに設定する。*/ SCI3Init( 15 ); while( 1 ) { c = SCI3Getc(); if( c != EOF ) { SCI3Putc( c ); if( c == '\r' ) SCI3Putc( '\n' ); } } }
H8/3687Fには2つのシリアルポートが有りますが、その内の一つSCI3を使用します。
受信に関しては割り込みでハンドラを起動し、リングバッファで構成される受信バッファに順次取り込みます。関数SCI3Getcはリングバッファから1文字取って来る関数で、バッファにデータが無ければEOFを返す仕様となっています。
関数SCI3Putcは一文字送信する関数で、特に割り込みを使ってはいません。
割り込みベクタテーブルは以下の様に作成します。長いので一部抜粋で。
void PowerON_Reset( void ); void abort(void); #pragma interrupt(TRAP0) /*トラップ命令#0*/ void TRAP0( void ){} 省略 #pragma interrupt(IRQ0) /*外部割込み端子0*/ void IRQ0( void ){} #pragma interrupt(IRQ1) /*外部割込み端子1*/ void IRQ1( void ){} #pragma interrupt(IRQ2) /*外部割込み端子2*/ void IRQ2( void ){} #pragma interrupt(IRQ3) /*外部割込み端子3*/ void IRQ3( void ){} 省略 void SCI_3( void ); /*外部参照する為に、プロトタイプ宣言を行う。*/ #pragma interrupt(IIC_2) /*I2C*/ void IIC_2( void ){} 省略 #pragma interrupt(SCI_3_2) /*シリアル*/ void SCI_3_2( void ){} #pragma section VECT /* 仮想ベクタテーブル */ void (*const VEC_TBL[])(void) = { PowerON_Reset, /*Vector 0 Reset Vector*/ (void *)0, /*Vector 1*/ (void *)0, /*Vector 2*/ (void *)0, /*Vector 3*/ (void *)0, /*Vector 4*/ (void *)0, /*Vector 5*/ (void *)0, /*Vector 6*/ abort, /*Vector 7*/ TRAP0, /*Vector 8*/ 省略 IRQ0, /*Vector 14*/ IRQ1, /*Vector 15*/ IRQ2, /*Vector 16*/ IRQ3, /*Vector 17*/ 省略 SCI_3, /*Vector 23*/ IIC_2, /*Vector 24*/ 省略 SCI_3_2, /*Vector 32*/ };
セクション定義ファイル(*.hsi)は以下の様になっています。CVECTと言うセクションが追加となっている点に注目してください。この割付アドレスは、デバックモニタの「User Vector」に一致させる必要が有ります。
[Hew Section Information] Version=1.0 Entry=2 Group1=PResetPRG,P,C,C$DSEC,C$BSEC,D(0000E800) Group2=CVECT,B,R,S(0000F840)
コメント 0