OPN系FM音源チップを制御します

OPN3L(YMF288-M)を制御します。

OPNA(YM2608)やOPN(YM2203)にも使用可能だと思われますがテストしていません。

OPNの場合は拡張FM部を正しく指定してください。

ADPCM系はテストしていません。

読出しも未実装です。コメントアウトしてありますが確認とれていません。

このプログラムは YMF288変換基板+Arduinoで簡易S98プレーヤを作る(その1)(http://d.hatena.ne.jp/m_yanase/20130901/1378020818) を参考にしています。

Committer:
netwing
Date:
Tue Jan 12 07:38:22 2016 +0000
Revision:
1:df099d954a8f
Parent:
OPN3L.h@0:409d4f3041ec
Child:
2:ea441ce9e405
???????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
netwing 0:409d4f3041ec 1 /*
netwing 0:409d4f3041ec 2 OPN3-L Lib for mbed by Hyper-b
netwing 0:409d4f3041ec 3 2016/01/12
netwing 0:409d4f3041ec 4
netwing 0:409d4f3041ec 5 このプログラムは
netwing 0:409d4f3041ec 6 YMF288変換基板+Arduinoで簡易S98プレーヤを作る(その1)(http://d.hatena.ne.jp/m_yanase/20130901/1378020818)
netwing 0:409d4f3041ec 7 を参考にしています。
netwing 0:409d4f3041ec 8 */
netwing 0:409d4f3041ec 9
netwing 0:409d4f3041ec 10
netwing 0:409d4f3041ec 11 #include "mbed.h"
netwing 0:409d4f3041ec 12 #ifndef __OPN3L__
netwing 0:409d4f3041ec 13 #define __OPN3L__
netwing 0:409d4f3041ec 14 class OPN3L
netwing 0:409d4f3041ec 15 {
netwing 0:409d4f3041ec 16 public:
netwing 0:409d4f3041ec 17 // D0 - 7 RST A0 A1 CS
netwing 0:409d4f3041ec 18 OPN3L(
netwing 0:409d4f3041ec 19 PinName _D0,
netwing 0:409d4f3041ec 20 PinName _D1,
netwing 0:409d4f3041ec 21 PinName _D2,
netwing 0:409d4f3041ec 22 PinName _D3,
netwing 0:409d4f3041ec 23 PinName _D4,
netwing 0:409d4f3041ec 24 PinName _D5,
netwing 0:409d4f3041ec 25 PinName _D6,
netwing 0:409d4f3041ec 26 PinName _D7,
netwing 0:409d4f3041ec 27 PinName RST,
netwing 0:409d4f3041ec 28 PinName A0,
netwing 0:409d4f3041ec 29 PinName A1,
netwing 0:409d4f3041ec 30 PinName CS
netwing 0:409d4f3041ec 31 );
netwing 0:409d4f3041ec 32
netwing 0:409d4f3041ec 33 // Reset
netwing 0:409d4f3041ec 34 void reset();
netwing 0:409d4f3041ec 35
netwing 0:409d4f3041ec 36 // Write
netwing 0:409d4f3041ec 37 void reg_write(unsigned char ifadr, unsigned char adr, unsigned char dat);
netwing 0:409d4f3041ec 38 void adr_write(unsigned char ifadr, unsigned char adr);
netwing 0:409d4f3041ec 39 void dat_write(unsigned char dat);
netwing 0:409d4f3041ec 40
netwing 0:409d4f3041ec 41 private:
netwing 0:409d4f3041ec 42 DigitalOut _BIT0;
netwing 0:409d4f3041ec 43 DigitalOut _BIT1;
netwing 0:409d4f3041ec 44 DigitalOut _BIT2;
netwing 0:409d4f3041ec 45 DigitalOut _BIT3;
netwing 0:409d4f3041ec 46 DigitalOut _BIT4;
netwing 0:409d4f3041ec 47 DigitalOut _BIT5;
netwing 0:409d4f3041ec 48 DigitalOut _BIT6;
netwing 0:409d4f3041ec 49 DigitalOut _BIT7;
netwing 0:409d4f3041ec 50 DigitalOut _RST;
netwing 0:409d4f3041ec 51 DigitalOut _A0;
netwing 0:409d4f3041ec 52 DigitalOut _A1;
netwing 0:409d4f3041ec 53 DigitalOut _CS;
netwing 0:409d4f3041ec 54
netwing 0:409d4f3041ec 55 void write_data(unsigned char dat);
netwing 0:409d4f3041ec 56
netwing 0:409d4f3041ec 57 void law_write(unsigned char ifadr, unsigned char adr, unsigned char dat);
netwing 0:409d4f3041ec 58
netwing 0:409d4f3041ec 59 static const int WT_FM_DA = 25; // min:24us FM Address 0x28
netwing 0:409d4f3041ec 60 static const int WT_FM_DB = 2; // min:1.9us FM Address 0x20-0xB6
netwing 0:409d4f3041ec 61 static const int WT_SSG_D = 2; // min:1.9us SSG Address 0x00-0x0F
netwing 0:409d4f3041ec 62 static const int WT_RHYTHM_DA = 22; // min:22us RHYTHM Address 0x10
netwing 0:409d4f3041ec 63 static const int WT_RHYTHM_DB = 2; // min:1.9us RHYTHM Address 0x11-0x1D
netwing 0:409d4f3041ec 64 };
netwing 0:409d4f3041ec 65
netwing 0:409d4f3041ec 66 #endif