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

同じ Cortex-M3 コア搭載のマイコンでも、STmicroelectronics の STM32F シリーズや、NXP の LPC17xx シリーズには、シリアル入力オーディオ DAC とインターフェスするための I2S モジュールが内蔵されています。
これらのモジュールでは、インターフェースに必要な信号はハードウェアが生成してくれます。
それに比べて、FM3 には I2S モジュールはなく、通常の SPI を利用してインターフェースしているので、DAC の LRCK 信号は別個に生成する必要があります。
FM 音源プログラムでは、その目的に「ベースタイマ」(BT: Base Timer) を使用しています。
「ベースタイマ」は、その名の通り、基本的な機能だけを持つタイマで、16 チャンネルが内蔵されており、また、それとは別に多機能な「多機能タイマ」も 3 チャンネル内蔵されています。
この「多機能タイマ」の方は、FM 音源プログラムでは PWM DAC 出力として利用しています。
ベースタイマには、1 チャンネル当り 2 本の入出力端子 TIOAn、TIOBn がありますが TIOAn 端子にしか信号を出力することができません。
タイマ出力として使える TIOAn 端子に限って表にまとめたものを下に示します。

BT
信号名
QFP
ピン
GPIOコネクタ外部接続
信号名
拡張ボード
信号名
TIOA00_046P40CN4-1P40 
TIOA00_138P3ACN2-13RTO00_0"PWM1"
TIOA00_211P08CN2-19CTS4_2[CTS0]
TIOA01_047P41CN4-2P41 
TIOA01_139P3BCN2-25P3B 
TIOA01_216P53-  
TIOA02_048P42CN4-3P42 
TIOA02_140P3CCN2-17RTO02_0"PWM2"
TIOA02_2169P60-  
TIOA03_049P43CN4-4P43 
TIOA03_141P3DCN2-26P3D 
TIOA03_2165PD2CN3-7E_TX00E_TX00
TIOA04_050P44CN4-5P44 
TIOA04_142P3ECN2-24RTO04_0"PWM3"
TIOA04_265P70CN1-28MDATA05[D5]
{7セグ0f}
TIOA05_051P45CN4-6P45 
TIOA05_143P3FCN2-37RTO05_1{スピーカ}
TIOA05_28P05CN2-11SIN4_2[RxD0]
{RXD}
TIOA06_0170PF3LED  
TIOA06_1148PC3CN3-4E_RX01E_RX01
TIOA06_225P5CCN8-1P5CVTrefIN
TIOA07_077P7CCN4-12P7C 
TIOA07_1124P23-  
TIOA07_271P76CN1-34MDATA11[D11]
{7セグ1d}
TIOA08_02PA0CN3-27RTO20_0AOUT_L
TIOA08_182PF1CN2-31INT14_0[IRQ2/A20]
{SW4}
TIOA08_2149PC4CN3-3E_RX00E_RX00
TIOA09_03PA1CN3-28PA1MMC_WP
TIOA09_1110PB0CN2-1AN16{可変抵抗}
TIOA09_219P56CN2-42P56 
TIOA10_04PA2CN3-29RTO22_0AOUT_R
TIOA10_1112PB2CN2-3AN18{マイク+}
TIOA10_2150PC5CN3-5E_RXDV0E_RXDV0
TIOA11_05PA3CN3-30PA3MMC_nCD
TIOA11_1114PB4CN2-5AN20 
TIOA11_221P58-  
TIOA12_06PA4CN3-31INT03_0PHY_INT0
TIOA12_1116PB6CN2-7AN22 
TIOA12_234P36CN2-33MCSX2[nCS2/A23]
TIOA13_07PA5CN3-32INT10_2PHY_INT1
TIOA13_123P5ACN1-39MCSX0[nCS0]
TIOA13_2100P1ACN1-7MAD06[D6]
{DIP6}
TIOA14_0151PC6CN3-10E_MDIO0E_MDIO0
TIOA14_178P7DCN2-29INT12_0[IRQ0]
{SW2}
TIOA14_2102P1CCN1-9MAD08[A8]
TIOA15_073P78CN1-36MDATA13[D13]
{7セグ0e}
TIOA15_180P7FCN4-14P7F 
TIOA15_2104P1ECN1-11MAD10[A10]
ベースタイマは 16 チャンネルが内蔵されていますが、すべてが同等というわけではなく、DMA を起動できるのは BT0, 2, 4, 6 の 4 本に限られます。 そんなこともあって、FM 音源プログラムでは、LRCK 生成に使うベースタイマを 4, 6, 9 のうちから選択できるように作ってあります。 「TGFM3.h」で

  #define FS_TIMER_CONFIG 9

と定義されており、デフォルトでは BT9 を使うようになっています。
LRCK のデューティーは、正確に 50 % とする必要があり、これを簡単・確実に実現するには、「トグル出力」を持つモードを使います。
ベースタイマの動作モードの中では、(連続)「リロードタイマ」モードで、このトグル出力が利用できます。
FM 音源プログラムでは、このリロードタイマを利用して、たとえばサンプリング周波数 fs = 48 kHz のモードでは、タイマ・アンダフローによるリロードのレートを fs の 2 倍の 96 kHz として、2 × fs = 96 kHz のレートで割り込みを掛けています。
LRCK 出力としては、トグル機能によって、正確にデューティー 50 % の 48 kHz 方形波を発生しています。
信号発生部のステレオ/モノラル設定に関係なく、DAC 出力部では常にステレオ出力として扱っていますので、サンプリング周波数 fs の 2 倍のレートでの割り込みが必要になっています。