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) を参考にしています。
FMOPN.h@2:ea441ce9e405, 2016-01-13 (annotated)
- Committer:
- netwing
- Date:
- Wed Jan 13 15:26:27 2016 +0000
- Revision:
- 2:ea441ce9e405
- Parent:
- 1:df099d954a8f
WR RD???
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 | 2:ea441ce9e405 | 12 | #ifndef __FMOPN__ |
netwing | 2:ea441ce9e405 | 13 | #define __FMOPN__ |
netwing | 2:ea441ce9e405 | 14 | class FMOPN |
netwing | 0:409d4f3041ec | 15 | { |
netwing | 0:409d4f3041ec | 16 | public: |
netwing | 2:ea441ce9e405 | 17 | // D0 - 7 RST A0 A1 CS WR RD |
netwing | 2:ea441ce9e405 | 18 | FMOPN( |
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 | 2:ea441ce9e405 | 30 | PinName CS, |
netwing | 2:ea441ce9e405 | 31 | PinName WR, |
netwing | 2:ea441ce9e405 | 32 | PinName RD |
netwing | 0:409d4f3041ec | 33 | ); |
netwing | 0:409d4f3041ec | 34 | |
netwing | 0:409d4f3041ec | 35 | // Reset |
netwing | 0:409d4f3041ec | 36 | void reset(); |
netwing | 0:409d4f3041ec | 37 | |
netwing | 0:409d4f3041ec | 38 | // Write |
netwing | 2:ea441ce9e405 | 39 | // ifadr 0x00 A1 = 0 |
netwing | 2:ea441ce9e405 | 40 | // ifadr 0x01 A1 = 1 |
netwing | 2:ea441ce9e405 | 41 | // adr Address |
netwing | 2:ea441ce9e405 | 42 | // dat Data |
netwing | 0:409d4f3041ec | 43 | void reg_write(unsigned char ifadr, unsigned char adr, unsigned char dat); |
netwing | 2:ea441ce9e405 | 44 | // unsigned char reg_read(unsigned char ifadr, unsigned char adr); |
netwing | 2:ea441ce9e405 | 45 | |
netwing | 0:409d4f3041ec | 46 | void adr_write(unsigned char ifadr, unsigned char adr); |
netwing | 0:409d4f3041ec | 47 | void dat_write(unsigned char dat); |
netwing | 2:ea441ce9e405 | 48 | // unsigned char dat_read(); |
netwing | 0:409d4f3041ec | 49 | |
netwing | 0:409d4f3041ec | 50 | private: |
netwing | 2:ea441ce9e405 | 51 | |
netwing | 2:ea441ce9e405 | 52 | BusInOut _BUS; |
netwing | 0:409d4f3041ec | 53 | DigitalOut _RST; |
netwing | 0:409d4f3041ec | 54 | DigitalOut _A0; |
netwing | 0:409d4f3041ec | 55 | DigitalOut _A1; |
netwing | 0:409d4f3041ec | 56 | DigitalOut _CS; |
netwing | 2:ea441ce9e405 | 57 | DigitalOut _WR; |
netwing | 2:ea441ce9e405 | 58 | DigitalOut _RD; |
netwing | 0:409d4f3041ec | 59 | |
netwing | 0:409d4f3041ec | 60 | void law_write(unsigned char ifadr, unsigned char adr, unsigned char dat); |
netwing | 0:409d4f3041ec | 61 | |
netwing | 0:409d4f3041ec | 62 | static const int WT_FM_DA = 25; // min:24us FM Address 0x28 |
netwing | 0:409d4f3041ec | 63 | static const int WT_FM_DB = 2; // min:1.9us FM Address 0x20-0xB6 |
netwing | 0:409d4f3041ec | 64 | static const int WT_SSG_D = 2; // min:1.9us SSG Address 0x00-0x0F |
netwing | 0:409d4f3041ec | 65 | static const int WT_RHYTHM_DA = 22; // min:22us RHYTHM Address 0x10 |
netwing | 0:409d4f3041ec | 66 | static const int WT_RHYTHM_DB = 2; // min:1.9us RHYTHM Address 0x11-0x1D |
netwing | 0:409d4f3041ec | 67 | }; |
netwing | 0:409d4f3041ec | 68 | |
netwing | 0:409d4f3041ec | 69 | #endif |