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:
Wed Jan 13 15:26:27 2016 +0000
Revision:
2:ea441ce9e405
Parent:
1:df099d954a8f
WR RD???

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 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