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) を参考にしています。
OPN3L.h@0:409d4f3041ec, 2016-01-12 (annotated)
- Committer:
- netwing
- Date:
- Tue Jan 12 07:03:11 2016 +0000
- Revision:
- 0:409d4f3041ec
??
Who changed what in which revision?
User | Revision | Line number | New 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 |