FR60 マイコン基板 (15) -- ベースボード製作(2)
ベースボードの製作では、ディジタル・オーディオ用 16 ビットシリアル DAC の ROHM BU9480F を接続しました。
BU9840F は推奨電源電圧範囲が 3.0 〜 5.5 V ですから、3.3 V 電源での動作に問題はありません。
シリアル DAC の LRCK 信号は PPG2 で発生させることにしました。
BCLK および SDAT の発生には通常 SPI を使いますが、FR60 には SPI はないので、UART を使います。
名前は「UART」ですが、同期転送の機能も含まれています。
同期転送のために必要な初期設定は次のようになります。
IO_PORT.IO_PFR2.bit.UART4 = 1; // enable UART4 IO_PORT.IO_PFR2.bit.SCKE4 = 1; // enable SCK4 IO_UTIMC4.bit.UCC1 = 0 ; // (2*n+2) mode IO_UTIM4 = 3; // 20 / 8 = 2.5 Mbps IO_UTIMC4.bit.UTST = 1 ; // U-Timer start IO_SMR4.bit.MD = 2; // synchronous mode IO_SCR4.bit.CL = 1; // 8 bit data IO_SCR4.bit.AD = 0; // data frame IO_SSR4.bit.BDS = 1; // MSB first IO_SCR4.bit.TXE = 1; // enable Tx
もとが UART なので、受信側だけでなく送信側にもバッファレジスタが存在します。
したがって、2008 年 1 年 19 日の記事 (id:pcm1723:20080119) の SH2 の場合のように、割り込みルーチンでフラグチェックをせずに 1 バイト目を書き込み、間に少し処理をはさんで、2 バイト目を書き込みます。
具体的なコードは次のようになります。
__interrupt void ppg2_int(void) { short int w; t1_tick = 1; // set timer1 tick flag IO_PCN2.bit.IRQF = 0; // clear flag w = wave_que[wq_rd_ix]; // wave data IO_SIDR4 = (w >> 8); // send hi byte to serial DAC IO_PDUT3 = (0x8000 ^ (w + (1 << 6))) >>7; wq_rd_ix = (wq_rd_ix + 1) & (WAVEQUESIZE-1); IO_SIDR4 = w; // send lo byte to serial DAC } // __interrupt void ppg2_int()