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_0 | 46 | P40 | CN4-1 | P40 | |
TIOA00_1 | 38 | P3A | CN2-13 | RTO00_0 | "PWM1" |
TIOA00_2 | 11 | P08 | CN2-19 | CTS4_2 | [CTS0] |
TIOA01_0 | 47 | P41 | CN4-2 | P41 | |
TIOA01_1 | 39 | P3B | CN2-25 | P3B | |
TIOA01_2 | 16 | P53 | - | ||
TIOA02_0 | 48 | P42 | CN4-3 | P42 | |
TIOA02_1 | 40 | P3C | CN2-17 | RTO02_0 | "PWM2" |
TIOA02_2 | 169 | P60 | - | ||
TIOA03_0 | 49 | P43 | CN4-4 | P43 | |
TIOA03_1 | 41 | P3D | CN2-26 | P3D | |
TIOA03_2 | 165 | PD2 | CN3-7 | E_TX00 | E_TX00 |
TIOA04_0 | 50 | P44 | CN4-5 | P44 | |
TIOA04_1 | 42 | P3E | CN2-24 | RTO04_0 | "PWM3" |
TIOA04_2 | 65 | P70 | CN1-28 | MDATA05 | [D5] {7セグ0f} |
TIOA05_0 | 51 | P45 | CN4-6 | P45 | |
TIOA05_1 | 43 | P3F | CN2-37 | RTO05_1 | {スピーカ} |
TIOA05_2 | 8 | P05 | CN2-11 | SIN4_2 | [RxD0] {RXD} |
TIOA06_0 | 170 | PF3 | LED | ||
TIOA06_1 | 148 | PC3 | CN3-4 | E_RX01 | E_RX01 |
TIOA06_2 | 25 | P5C | CN8-1 | P5C | VTrefIN |
TIOA07_0 | 77 | P7C | CN4-12 | P7C | |
TIOA07_1 | 124 | P23 | - | ||
TIOA07_2 | 71 | P76 | CN1-34 | MDATA11 | [D11] {7セグ1d} |
TIOA08_0 | 2 | PA0 | CN3-27 | RTO20_0 | AOUT_L |
TIOA08_1 | 82 | PF1 | CN2-31 | INT14_0 | [IRQ2/A20] {SW4} |
TIOA08_2 | 149 | PC4 | CN3-3 | E_RX00 | E_RX00 |
TIOA09_0 | 3 | PA1 | CN3-28 | PA1 | MMC_WP |
TIOA09_1 | 110 | PB0 | CN2-1 | AN16 | {可変抵抗} |
TIOA09_2 | 19 | P56 | CN2-42 | P56 | |
TIOA10_0 | 4 | PA2 | CN3-29 | RTO22_0 | AOUT_R |
TIOA10_1 | 112 | PB2 | CN2-3 | AN18 | {マイク+} |
TIOA10_2 | 150 | PC5 | CN3-5 | E_RXDV0 | E_RXDV0 |
TIOA11_0 | 5 | PA3 | CN3-30 | PA3 | MMC_nCD |
TIOA11_1 | 114 | PB4 | CN2-5 | AN20 | |
TIOA11_2 | 21 | P58 | - | ||
TIOA12_0 | 6 | PA4 | CN3-31 | INT03_0 | PHY_INT0 |
TIOA12_1 | 116 | PB6 | CN2-7 | AN22 | |
TIOA12_2 | 34 | P36 | CN2-33 | MCSX2 | [nCS2/A23] |
TIOA13_0 | 7 | PA5 | CN3-32 | INT10_2 | PHY_INT1 |
TIOA13_1 | 23 | P5A | CN1-39 | MCSX0 | [nCS0] |
TIOA13_2 | 100 | P1A | CN1-7 | MAD06 | [D6] {DIP6} |
TIOA14_0 | 151 | PC6 | CN3-10 | E_MDIO0 | E_MDIO0 |
TIOA14_1 | 78 | P7D | CN2-29 | INT12_0 | [IRQ0] {SW2} |
TIOA14_2 | 102 | P1C | CN1-9 | MAD08 | [A8] |
TIOA15_0 | 73 | P78 | CN1-36 | MDATA13 | [D13] {7セグ0e} |
TIOA15_1 | 80 | P7F | CN4-14 | P7F | |
TIOA15_2 | 104 | P1E | CN1-11 | MAD10 | [A10] |
#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 倍のレートでの割り込みが必要になっています。