GR-SAKURAで外部バス

GR-SAKURA用FM音源シールドのための設計メモ。


ヤマハFM音源YM2203との接続には、外部メモリバスが必要。

  • データバス8ビット
  • アドレスバス1ビット
  • RD#,WR#,CS#

GR-SAKURAのArduino互換コネクタと拡張コネクタで外部メモリバスに出ている外部メモリバスのピンは以下のとおり。

  • D0-D7 (PD0-PD7) ... CN12(拡張)
  • D8-D15 (PE0-PE7) ... CN11(拡張)
  • A16-A19 (PC0-PC3) ... CN9,7(拡張,Arduino)
  • RD# (P52) ... CN9(拡張)
  • WR# (P50) ... CN9(拡張)
  • CS0#-CS3# (PC7-PC4) ... CN7(Arduino)
  • CS4#-CS5# (P24-P25) ... CN8(Arduino)

そこで、次のピンを使うことにする。

  • D0-D7 (PD0-PD7) ... CN12(拡張)
  • A16(PC0) ... CN9(拡張)
  • RD# (P52) ... CN9(拡張)
  • WR# (P50) ... CN9(拡張)
  • CS3# (PC4) ... CN7(Arduino)

拡張コネクタCN12とCN9はArduino互換コネクタのすぐ内側にある。スイッチサイエンスのArduino用バニラシールド基板は、パターンカットさえすればちょうど良い位置にランドがある。よく似ているが、サンハヤトArduino用ユニバーサル基板は、ランドの位置がずれているので使えない。
GR-SAKURAシールド


ペリフェラルの設定は下記のように。(未検証)

// YM2203のステータスを読む
#define YM2203_STATUS   (*(volatile unsigned char*)0x05000000) // CS3,A16=0
// YM2203のレジスタアドレスを書く
#define YM2203_REG_ADDR (*(volatile unsigned char*)0x05000000) // CS3,A16=0
// YM2203のレジスタ値を読む/書く
#define YM2203_REG_DATA (*(volatile unsigned char*)0x05010000) // CS3,A16=1

    SYSTEM.SYSCR0.WORD = 0x5a03;  //外部バス有効

    MPC.PWPR.BIT.B0WI = 0;        //端子機能制御レジスタの
    MPC.PWPR.BIT.PFSWE = 1;       //プロテクト解除

    MPC.PFCSE.BIT.CS3E = 1;       //CS3有効
    MPC.PFCSS0.BIT.CS3S = 2;      //PC4=CS3
    MPC.PFAOE1.BIT.A16E = 1;      //A16有効
    MPC.PFBCR0.BYTE = 0;          //8ビットバス, PCxにアドレス

    BSC.CS3CR.WORD = 0x0001 | (2 << 4);  // 8ビットバス
/*
    // TODO なにこれ?
    BSC.CS3MOD.WORD = 0x8001;
    BSC.CS3WCR1.LONG = 0x03030303;
    BSC.CS3WCR2.LONG = 0x11110111;
    BSC.CS3REC.WORD = 0x0000;
*/

【参考】
GR-SAKURAで外部バスを利用する | Ryusendo info.
GR-SAKURA用ソフトウェアとシールド