ADuC7026でMIDI受信
DWM3月号おまけ基板でMIDIの受信実験をしてみました。
以前、chuckさんが紹介されていたMIDI受信検討用治具がとって~も便利そうだったので、同様な治具をパクって製作して実験をすることに…
ADuC7026はUARTが1つしか無く、DWM基板ではシリアルポート用に使用済み?かと思ったのですが、GPxCON MMRの設定により、シリアル入力をIO0[7]に設定することが出来ますので、基板のCN3:A07に治具の出力(MIDI信号)を接続しました。
以下は実験プログラム(gcc版)の抜粋です。
// 32kHz外部水晶
*pllkey1 = 0xAA;
*pllcon = 0x01;
*pllkey2 = 0x55;
// CD設定
*powkey1 = 0x01;
*powcon = 0x00;
*powkey2 = 0xF4;
// UART設定 31.25kbps 8bit none 1bit
*comcon0 = 0xF0; // DLAB=1
*comdiv0 = 0x29; // DL=41
*comdiv1 = 0x00; //
*comdiv2 = 0x8827; // M=1 N=39
*comcon0 = 0x03; // DLAB=0 WLS=8bit
// GPIO設定
*gp0con = 0x20000000;
*gp1con = 0x00000000;
*gp2con = 0x00000000;
*gp4con = 0x00000000;
*gp4dat = 0xFFFF0000;
midi_clk = 0;
while(1)
{
while((*comsta0 & 0x01) == 0) {}
buf = *comrx;
if( buf == 0xF8)
midi_clk++;
if( midi_clk == 24)
{
midi_clk = 0;
*gp4dat = 0xFF7F0000;
continue;
}
if( midi_clk == 6)
{
*gp4dat = 0xFFFF0000;
}
}
動作としては、単純にMIDIクロック(F8H)をカウントして、拍子に合わせて基板上に実装しているLEDをチカチカさせるものです。
UARTボーレート設定には、フラクショナル・デバイダを使用して正確に31.25kbpsとなるようにしたつもりです。
で、MIDIキーボードCBX-K1からMIDIクロックを発生させると、基板上のLEDがチカチカして、とりあえず実験は成功。
あとは、ADuC7026には12bitDACが4ch内蔵されていますので、MIDI NOTEコマンドを適切に処理する部分を実装すれば、MIDI-CVコンバータの出来上がりなんですけどね。
(CVスパン合わせる回路とGATEバッファ回路は必要ですけど…)
それにしても、「volatile」宣言の意味が、未だに良く理解できません(^_^;)



コメント
うわー、すごい。
なんだかAVRほっぽってこっちがメインになりそうな勢いですね。
投稿者: r0r0 | 2006年02月22日 05:01
進んでますね!
投稿者: Chuck | 2006年02月22日 09:18
ほとんど勢いっす(笑)
落ち着いたらAVRもやりますよ~
投稿者: RJB | 2006年02月22日 22:20
volatile は 「揮発性の」 という意味ですが
volatile宣言した変数は、コンパイラには判らない「どこか」でデータが書き換えられる可能性がありますよ
とコンパイラに教える仕掛けです。
コンパイラが最適化したりするときに、その変数がその関数内で変化しないからといって、削除してしまうのを禁止します。
投稿者: 橋本 | 2006年03月27日 14:58
橋本さん、はじめまして。
なるほど、そー言うことなんですね…
ありがとうございました。
投稿者: RJB | 2006年04月03日 01:17