CQ-FRK-FM3 基板用FM音源プログラム -- TGFM3 (5)

FM3 には、シリアル・インターフェースの系統に属する UART、SPI、LIN および I2C の 4 つの機能を、ひとつの周辺モジュールに集約した、「マルチファンクションシリアルインターフェース」(MFS: Multi Function Serial interface) が 8 組内蔵されています。
これらの機能は、基本的に「バイト指向」なプロトコルであるため、MFS でも、データ長は最大で 9 ビットとなっています。
そのため、16 ビット・シリアル・オーディオ・データを SPI で送出する場合には、8 ビット転送を 2 回行うことで実現します。
FM 音源プログラムでは、MIDI 入出力と LCD 入出力のために UART を 2 組、ディジタル・オーディオ DAC 出力のために SPI が 1 組必要になります。
MFS モジュールの選択および I/O ピン割り付けを検討するために作成した表を下に示します。
全体をひとつの表にまとめると長くなりすぎるので、MFS0 〜 MFS3 に関する表と、 MFS4 〜 MFS7 に関する表のふたつに分けました。
また、最初の表の MFS0 〜 MFS3 には FIFO バッファは実装されておらず、通常の 1 バイト容量のバッファ・レジスタだけとなっています。
2 番目の表の MFS4 〜 MFS7 には 16 バイト容量の FIFO バッファが実装されています。


>
MFS
信号名
QFP
ピン
GPIOコネクタ外部接続
信号名
拡張ボード
信号名
SIN0_0126P21CN2-15SIN0_0[RxD1]
SIN0_194P14CN1-1MAD00[A0]
{DIP0}
SIN0_2114PB4CN2-5AN20 
SOT0_0125P22CN2-16SOT0_0[TxD1]
SOT0_195P15CN1-2MAD01[A1]
{DIP1}
SOT0_2115PB5CN2-6AN21{マイク-}
SCK0_0124P23-  
SCK0_196P16CN1-3MAD02[A2]
{DIP2}
SCK0_2116PB6CN2-7AN22 
SIN1_019P56CN2-42P56 
SIN1_191P11CN3-38AN01AIN_R
SIN1_281PF0CN2-30INT13_0[IRQ1]
{SW3}
SOT1_020P57-FRAM_SDA 
SOT1_192P12CN1-41  
SOT1_282PF1CN2-31INT14_0[IRQ2/A20]
{SW4}
SCK1_021P58-FRAM_SCL 
SCK1_193P13CN1-42  
SCK1_283PF2CN2-32INT15_0[IRQ3/A21]
{SW5}
SIN2_067P72CN1-30MDATA07[D7]
{7セグ0h}
SIN2_1123P24CN1-18MAD17[A17]
SIN2_297P17CN1-4MAD03[A3]
{DIP3}
SOT2_068P73CN1-31MDATA08[D8]
{7セグ1a}
SOT2_1122P25CN1-17MAD16[A16]
SOT2_298P18CN1-5MAD04[A4]
{DIP4}
SCK2_069P74CN1-32MDATA09[D9]
{7セグ1b}
SCK2_1121P26CN1-16MAD15[A15]
SCK2_299P19CN1-6MAD05[A5]
{DIP5}
SIN3_070P75CN1-33MDATA10[D10]
{7セグ1c}
SIN3_113P50CN2-23MOEX[nRD]
SIN3_258P48CN3-33SIN3_2RxD3
SOT3_071P76CN1-34MDATA11[D11]
{7セグ1d}
SOT3_114P51CN2-21MWEX[nWR0/RDnWR]
SOT3_259P49CN3-34SOT3_2TxD3
SCK3_072P77CN1-35MDATA12[D12]
{7セグ1e}
SCK3_115P52CN2-21MDQM0[nWR0/RDnWR]
SCK3_260P4ACN1-23MDATA00[D0]
{7セグ0a}

MFS
信号名
QFP
ピン
GPIOコネクタ外部接続
信号名
拡張ボード
信号名
SIN4_0165PD2CN3-7E_TX00E_TX00
SIN4_1100P1ACN1-7MAD06[A6]
{DIP6}
SIN4_28P05CN2-11SIN4_2[RxD0]
{RXD}
SOT4_0164PD1CN3-8E_TX01E_TX01
SOT4_1101P1BCN1-8MAD07[A7]
{DIP7}
SOT4_29P06CN2-14SOT4_2[TxD0]
{TXD}
SCK4_0163PD0CN3-21E_TX10E_TX10
SCK4_1102P1CCN1-9MAD08[A8]
{DIP8}
SCK4_210P07CN8-15-nRESET_OUT
SIN5_0169P60-  
SIN5_1141P92CN2-36MAD21[A21]
SIN5_234P36CN2-33MCSX2[nCS2/A23]
SOT5_0168P61-  
SOT5_1142P93CN2-34MAD22[nCS3/A22]
SOT5_235P37CN2-34MCSX3[nCS3/A22]
SCK5_0167P62-  
SCK5_1143P94CN2-33MAD23[nCS2/A23]
SCK5_236P38CN2-28MCLKOUT[BUSCLK]
SIN6_016P53CN2-22MDQM1 
SIN6_131P33CN3-42SIN6_1SPI_MISO
SIN6_2170PF3-LED 
SOT6_017P54CN2-41P54 
SOT6_130P32CN3-41SOT6_1SPI_MOSI
SOT6_2171PF4CN4-9PF4 
SCK6_018P55-  
SCK6_129P31CN3-40SCK6_1SPI_CLK
SCK6_2172PF5CN4-10PF5 
SIN7_022P59CN2-43P59 
SIN7_164P4ECN1-27MDATA04[D4]
{7セグ0e}
SIN7_2110PB0CN2-1AN16{可変抵抗}
SOT7_023P5ACN1-39MCSX0[nCS0]
SOT7_163P4DCN1-26MDATA03[D3]
{7セグ0d}
SOT7_2111PB1CN2-2AN17{温度センサ}
SCK7_024P5BCN1-40MCSX1[nCS1]
SCK7_162P4CCN1-25MDATA02[D2]
{7セグ0c}
SCK7_2112PB2CN2-3AN18{マイク+}
この表を見て分かるように、やはり、端子の数の多い外部バス・インターフェース信号と多く重なっています。 また、「コネクタ」のカラムが「-」になっている信号は、コネクタに配線されておらず、外部から利用できない信号です。 特に、SOT1_0、SCK1_0 はボード上の I2C 接続の FRAM に直結されており、この FRAM 専用となっています。 これは、FRAM は 1 MHz のクロック・スピードで駆動できるのに対して、一般的な I2C デバイスでは 100 kHz とか 400 kHz のクロック・スピードに制限されるので、遅いデバイスとは独立に接続してスピードを確保するためと思われます。 外部拡張ボードの回路に割り当てられている信号も多くあり、拡張ボードを使わず独自のベースボードを作成する場合でも、拡張ボードでの割り当てと矛盾しないような構成にするほうが賢明です。 シリアル信号関係で外部拡張ボードで使われているのは、まず、MMC / SD カードを SPI でアクセスするための MFS6 の信号 SIN6_1、SOT6_1、SCK6_1 です。 チップセレクト信号や、ライトプロテクト信号のために汎用 I/O ポートも割り付けられていますし、MFS6 には 16 バイト・ハードウェア FIFO バッファも実装されていて、MFS6 を MMC / SD カードアクセス以外の用途に使うメリットはありません。 また、USB-シリアル変換チップを介して、MFS0 (SIN0_0、SOT0_0)、MFS3 (SIN3_2、SOT3_2)、MFS4 (SIN4_2、SOT4_2) を UART として使用する構成になっています。 これらのモジュールを UART ではなく SPI や I2C の機能として使おうとすると、SCK 端子も利用する必要がありますが、対応する SCK 端子には、すでに拡張ボード上の他の機能が割り当てられており、自由には使えません。 したがって、MFS0、MFS3、MFS4 については UART 機能だけに限って使うのが有利です。 FM 音源プログラムでは、このうち、MFS3 を MIDI 入出力に、MFS0 を LCD MCU 入出力に利用していますが、その割り当ては固定的ではなく、MFS0、3、4 の中から選択できる作りにしています。 具体的には、ソース・ファイルの「TGFM3.h」の中で、マルチファンクションシリアルインターフェース・モジュールの番号を、

    #define MIDI_UART_CONFIG 3
    #define LCD_UART_CONFIG  0

と指定しています。
16 ビット・シリアル・オーディオ DAC 用の SPI としては、

    #define DAC_SPI_CONFIG 1

として、MFS1 を指定しています。
DAC は常時使用するものなので、ボード上の FRAM とは両立しません。
FRAM をアクセスするのは動作開始時だけに限り、必要な情報を読み書きした後は FRAM を使用せず、MFS1 を DAC 専用とする使い方であれば両者を活かせます。
SPI として使う MFS モジュール番号は、0、1、7 が指定可能です。