M16CボードのLCD
昨日、MusicDriverを書いたついでに気付いたことがあるのでメモを残しておきたい。
M16C/62Pのマイコンボードは、各種の拡張ボードに載せて使うことが多い。
▽ここに写真
たとえば、LCDボード(左)や、マルチIOボード(右)に同梱されているCD-Rには、いくつかのサンプルプログラムが収録されている。
サンプルプログラムの一つにLCD表示があるが、割込みを使用すると誤動作するようだ。
正しく動作させるためには、LCD表示に関係する関数の三つ、すなわちコマンド書込み、データ書込み、ビジーチェック、それぞれに割込みの記述が必要となる。
たとえば、以下のように▼の処理を追加すればいい。
// ---------------------------------------- // LCDへのコマンド書込み // ---------------------------------------- void lcdWrite1Command( unsigned char command ) { unsigned char outcommand; // ▼ここと _asm( "\tFCLR I"); // 割込み禁止 LCDRS = 0; // RS<-0(コマンド指定) LCDE = 0; LCDRW = 0; // RW<-(W指定) // ポート方向レジスタを出力に設定 pd6 |= 0x03; pd8_7 = 1; prc2 = 1; // pd9への書き込み許可 pd9 = 0xFF; outcommand = command >> 4; // 上位4bitを下位4bitへ outcommand &= 0x0f; // マスク処理 p9 = outcommand; // コマンド上位4bitを出力 LCDE = 1; #pragma ASM nop nop nop nop #pragma ENDASM LCDE = 0; outcommand = command & 0x0f; // コマンドデータの上位4bitを殺す p9 = outcommand; // コマンドデータ下位4bitを出力 LCDE = 1; #pragma ASM nop nop nop nop #pragma ENDASM LCDE = 0; // ▼ここだな _asm( "\tFSET I"); // 割込み許可 }
Iフラグは割込み許可フラグらしい。IフラグをクリアするとCPUは割込み禁止となり、Iフラグをセットすると、割込み許可となるようだ。
上のように、フラグの操作はインラインアセンブラで記述すると簡単だ。
この記事を書くに当たって、絶版になっているM16Cのアセンブラ本を参考にした。アセンブラ本なんて役立つものかと思っていたが、役立つこともあるんだな。
コメント