Arduino UNO SPI で YMF825 にアクセス
参照:
http://download.yamaha.com/api/asset/file/?language=ja&site=jp.yamaha.com&asset_id=52806
http://download.yamaha.com/api/asset/file/?language=ja&site=jp.yamaha.com&asset_id=52805
Master Arduino SPI セッティング sample1.ino
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV8); // (UNO クロック 16MHz / 8) -> 2MHz:0.5us
SPI.setDataMode(SPI_MODE0);
Slave YMF825 SPI 仕様 fbd_spec1.md
MSBファースト
モード0
最大10MHz
※ YMF825 に対する注意書きを見つけたので残しておく YAMAHA pdf より
「インタフェースレジスタ I_ADR#21、#22 を使用して制御レジスタを読み出すときは、
I_ADR#21 書き込み後、I_ADR#22 を読み出す前の SS_N=“H” 期間が 500ns 必要となります。
それ以外は 100ns です。」
X-Y: 0.5us 1 ビット分の SCK 時間 SPI.setClockDivider() で指定したとおり
A-B: 15.2us 1 バイト分の書込み時間
C-D: 195.9us 35 バイト分のバースト書込み時間
X-Y:
0.5us: 2MHz なので、まだ高速化出来る
A-B: 15.2us
60 バイト/ミリ秒
この計算は、まだ考慮・検証すべき点あり もう少しパフォーマンスが落ちる (50byte/ms 位) 筈
C-D: 195.9us (35byte)
4.6us/byte (バイト数によって変化 データ数:1byte なら、上記 A-B の時間になる)
バス接続されたデバイスよりはアクセスが遅いけれど、
パラレルバス配線・アドレスデコード等の手間を考えたら充分ではないかな?