FM音源プログラム TGSTM32F4 (V1.2) readme 2012/04/18 pcm1723 ●はじめに このプログラムは、 STMicroelectronics 製 STM32F4 マイコン・ボード 「STM32F4 Discovery」 用のFM音源プログラム (V1.2) のパッケージです。 V1.2 では、シリアル MIDI使用時のマルチ・ポート対応で同時発音数 32 (32 kHz サンプリング、モノラル設定の場合) を実現しました。 ステレオ (パンポット) 対応と、従来の SMAF (Synthetic music Mobile Application File) シーケンサに代えて SMF (Standard MIDI File) シーケンサの組み込みにより、同時発音数を活かしたデモ曲を内蔵しました。 非商用利用のみ許可します。 内容的には、既存の TGSTARM/TGSTVL などの STMicro 製 Cortex-M3 用 プログラムをベースにしたもので、機能は Renesas RX62N 用のプログラム (V1.2) と同等のものです。 STM32F4 シリースは Cortex-M4F プロセッサですが、M4 で拡張された命令や、 単精度浮動小数点演算機能は使っておらず、単に高速クロック (168 MHz) の Cortex-M3 プロセッサとして使っているだけです。 STM32F4 Discovery ボード上のディジタル・オーディオ DAC CS43L22 から 音を出すので、内蔵デモ曲を再生するだけなら、外部回路は必要ありません。 もちろん、(標準) MIDI / シリアル MIDI 入力の MIDI 音源として機能 させるには、外部回路として MIDI インターフェースが必要になります。 Atollic TrueSTUDIO for STMicroelectronics STM32 Lite V 2.3.0 環境と、 gcc のツールチェインを利用したコンパイルとに対応しています。 TrueSTUDIO を使わない場合には、オブジェクトの hex ファイルは、 STMicroelectronics 製のアプリケーション「ST Visual Programmer」 (STVP) を利用して書き込みます。 多くの部分は ADuC7026版や、V850版と同様なので、Web サイト http://www.geocities.jp/pcm1723/ のADuC7026版や、V850版の説明を参照してください。 含まれている音色データはフリーの「std.sb」から変換したものなので、上記 サイトの記述のように、「MA2 オーサリングツール」付属の音色データと差し 替えることをお勧めします。 ソースファイルの再コンパイルによらず、HEX ファイルの音色データ部分のみを 差し替える方法も用意してあります。 上記サイトの「音色データの差し替え/再コンパイルなしの差し替え」の項 http://www.geocities.jp/pcm1723/compile.htm#fmdata_4 を参照してください。 出来上がりのファイル名 (パス名) は、 TGSTM32F4/Debug/TGSTM32F4ma.hex TGSTM32F4/Debug/TGSTM32F4ma2.hex です。 ●仕様 - STM32F4-Discovery ボード上の CS43L22 (CIIRRUS LOGIC 製ディジタル・ オーディオ DAC) からのオーディオ出力 (3.5 mmΦ ステレオ・ミニジャック) - サンプリング周波数は 32 kHz, 35 kHz, 40 kHz, 48 kHz, 49.716 kHz に対応し、スイッチ操作で選択可能 - デフォルトのサンプリング周波数は 48 kHz で、同時発音数は 16 (ステレオ)  サンプリング周波数と同時発音数の対応は次の通り     fs NPOLY NPOLY 周波数誤差 (モノラル) (ステレオ) (ppm) -------- ------ ------ --------- 49.7 kHz 20 16 0 48.0 kHz 21 16 -186.01 40.0 kHz 25 20 0 35.0 kHz 29 23 0 32.0 kHz 32 25 +37.56 ここで、49.7 kHz は、正確には 49.7159090... kHz で、NTSC カラー・ サブキャリア周波数の 3.579545... MHz や 14.31818... MHz をクロック源 とする OPL3 などの「本物」の FM 音源チップで使われているサンプリング 周波数 ステレオとモノラルの切り替えはコンパイル時のオプションであり、デフォルト  ではステレオになっている  ステレオ対応は、MIDI コントロール・チェンジ 10 番 (CC#10) の  「パンポット」の指定により、ステレオ音場内での「定位」を設定するだけ  の機能で、音源自体にステレオの広がりを持たせるわけではない 各 MIDI チャンネルとも、後着優先のモノモード、つまり、1チャンネル  あたり1音しか発音できない 16 音 (以上) を同時発音させるためには、16 MIDI チャンネルすべてを使う 必要があり、事実上、シーケンサーによる演奏に限られる V1.2 では、SMF シーケンサを内蔵し、デモ曲のデータも上述の事情を考慮  して作成してあるので、同時発音数を活かした演奏となっている  また、次項のマルチ・ポートは、単なる「MIDI プレイヤー」では対応して  いない場合が多く、シーケンサー・ソフトによる再生が必要になる - 「シリアル MIDI」の「マルチ・ポート」に荘ホ応し、2 ポート、最大 32 音  まで発音可能 同時発音数 16 以下の場合は、すべて「ポート 0」に割り付けられ、同時  発音数 16 を超える分が「ポート 1」に割り付けられる  ホスト PC のアプリケーション側で、たとえば YAMAHA の「CBX ドライバ」  で "YAMAMHA CBX A Driver" を選ぶとポート 0 側、"YAMAHA CBX B Driver"  を指定するとポート 1 側が選ばれる - 通常のマルチティンバー音源では、MIDI チャャ塔lル 10 はリズム音源の チャンネルだが、本機ではリズム音源の機能はない 同時発音数 10 以上 15 以下の場合には、MIDI チャンネル 10 をスキップ  して割り当てるように変更 (V1.2) 同時発音数 16 以上では、MIDI チャンネル 10 のスキップ機能はないので、  リズムデータを含む演奏データを再生する場合には、MIDI チャンネル 10 を  送信側でオフにして、リズムデータを送出しない設定にする必要がある - フィードバック・ディレイによる簡易ディジWタル・リバーブ (エコー) を実装 - フォトカプラを使った通常の MIDI 入力 (311.25 kbps) と、RS-232-C 経由の シリアル MIDI 入力 (38.4 kbps) に対応 - 16 文字 x 2 行のキャラクタ LCD を接続しbト、簡易 MIDI モニタ、CPU 負荷率  などの表示や、サンプリング周波数の切り替えが可能 ●ハードウェア 回路図「TGSTM32F4.pdf」、「LCD1823.pdf」を、HEX パッケージでは、この「readme.txt」 ファイルと同じフォルダ、ソース・パッケージでは「TGSTM32F4/sch」フォルダに置いて あります。 オーディオ信号出力は ボード上の DAC (CS43L22) を利用しているので、ボード上の 3.5 mmΦステレオ・ミニジャックから出力されます。 信号はモノラルです。 入力は通常の MIDI 入力 (31.25 kbps) と、シリアル MIDI (38.4 kbps) に対応して います。 具体的なインターフェース回路は、Web サイトを参照してください。 インターフェース回路のマイコン側「RxD」出力を コネクタ 1 (P1) ピン 41 (PD9/USART3_RX) につなぎます。 TxD 側は使用していないので、特に接続する必要はありません。 サウンドボート用のいわゆる MIDI ケーブルは +5V 用ですが、GRAVIS ULTRASOUND の MIDI 接続ボックスで試したところ、+3.3V 電源でも動作しました。 回路図の コネクタ 1 (P1) ピン 43 (PD11) に接続する「SENS」信号は、MIDI/シリアル MIDI のボーレート切り替えのためで、 オープンでシリアル MIDI (38.4 kbps)、GND への接続で通常の (legacy) MIDI (31.25 kbps)を選択します。 シリアル MIDI だけを使う場合には、何も接続せず、オープンで構いません。 プログラムを実行するとボード上の緑色の LED (LED4) が薄暗く点灯します。 CPU 負荷が小さい時は明るく、負荷が大きい時は暗くなります。 STM32F4 Discovery の外部拡張コネクタ P2 の 44 番ピン (PD12) を、デューティー 測定可能なテスターでを測定すると、CPU の空きの比率を測定することになり、 100 % からその測定値を引くと負荷率が求められます。 回路図での PD12 (LED 出力) から PC5 (AD 入力) への RC 回路を実装すると、LCD の 「システム」画面で CPU 負荷率を直読できます。 プログラムを実行すると、デモ曲を自動演奏しますから、MIDI 入力はなくても 音は出ます。 ボード上の青いキャップの「USER」ボタンを長押し (数秒) すると、デモ演奏を終了 できます。 デモ演奏中に「USER」ボタンをクリック (短く押す) すると、最初に戻って演奏を 再開します。 RX62N 版と同様に、8 ビット MCU を利用してキャラクタ LCD / キー・スイッチと のインターフェースを実現しています。 今回は、従来の PIC16F628 版 (18 ピン DIP) と、AVR ATtiny2313 版 (20 ピン DIP) に加え、14 ピン DIP パッケージの PIC16F1823 版も用意してあります。 HEX パッケージには PIC16F1823 版の回路図の pdfファイルと、プログラムの hex ファイルのみを同梱してあります。 この回路を実装しなくても、FM 音源プログラムの動作には全く影響はありません。 ボード上の青い「USER」ボタンが「INC」キーと同等の機能を持っており、少々 操作が面倒になることを覚悟すれば、キースイッチは付けないで済ますことも できます。 同時発音数は、全てのサンプリング周波数において 16 以上なので、LCD の 「チャンネル・アサイン」画面は省略しています。 ●パッケージ HEX パッケージと、ソース・パッケージを用意してあります。 zip 形式で圧縮されていますので、Windows 自体の機能で解凍できます。 オブジェクトの HEX ファイルは、 TGSTM32F4.hex です。 このファイルを書き込みます。 書き込みには、STMicroelectronics 製のアプリケーション 「ST Visual Programmer」(STVP) を利用します。 STVP は STMicroelectronicsの web サイトからダウンロードできます。 なお、同梱のオブジェクトは Atollic TrueSTUDIO for STMicroelectronics STM32 Lite V2.3.0 でコンパイルしたものです。 ●HEX パッケージの内容 licence.txt : ライセンス条件のファイル readme.txt : このファイル TGSTM32F4.hex : FM 音源プログラムの hex ファイル TGSTM32F4.pdf : STM32F4 Discovery ボード用の回路図の pdf ファイル LCD1823.pdf : PIC15F1823 を使用した LCD インターフェース回路の pdf ファイル LCD1823.hex : PIC15F1823 に書き込むプログラムの HEX ファイル arabe_sp.mid : デモ曲の smf ファイル (C.A.ドビュッシー: アラベスク第 1 番) ●ソース・パッケージの内容 パッケージを解凍すると、「TGSTM32F4」フォルダの下にファイルが展開されます。 以下では、TGSTM32F4 フォルダを基準に話を進めます・ \TGSTM32F4 | +-- readme.txt : このファイル | +-- licence.txt : ライセンス条件のファイル | +-- .project : TrueSTUDIO 用のプロジェクトファイル | +-- .cproject : TrueSTUDIO 用のプロジェクトファイル | +-- .settings : TrueSTUDIO 用のフォルダ | +-- makefile : gcc ツールチェイン用のメイクファイル | +-- TGSTM32F4.pnproj : Programmer's Notepad 2 用のプロジェクトファイル | +-- TGSTM32F4.pnps : Programmer's Notepad 2 用のプロジェクトファイル | +-- \gen_tab : テーブル定義ファイル作成用ツール | | | +-- Makefile : テーブル一括生成のためのメイクファイル | | | +-- *.c : C ソースファイル | | | +-- *.awk : gawk ソースファイル | +-- \src : ソースファイルフォルダ | | | +-- \common : 各マイコン独立、あるいは依存性の少ないソースのフォルダ | | | | | +-- *.c : C ソースファイル | | | | | +-- *.h : ヘッダ・ファイル | | | +-- \STM32F4 : STM32F4-Discovery 固有のソースファイルのフォルダ | | | +-- *.c : C ソースファイル | | | +-- *.h : ヘッダ・ファイル | +-- \Debug : オブジェクトファイルが格納されるフォルダ | +-- \Libraries : ライブラリ関係ファイルのフォルダ | | | +-- \CMSIS : CMSIS 関係のファイルのフォルダ | | | +-- \Device : STMicro 提供のライブラリのフォルダ | | | +-- \STM32F4xx_StdPeriph_Driver : STMicro 提供のライブラリのフォルダ | +-- \Utilities : STM32F4-Discovery 用のライブラリのフォルダ | | | +-- \STM32_EVAL : STM32F4-Discovery 用のライブラリのフォルダ | +-- \Templates : 各開発環境別のスタートアップ、LD スクリプトのフォルダ | | | +-- \gcc_ride7 : gcc / ride7 用のスタートアップ、LD スクリプトのフォルダ | +-- \sch : 回路図のフォルダ | | | +-- TGSTM32F4.ce3 : bsch3v で書いた STM32F4-Discovery 用の回路図 | | | +-- TGSTM32F4.pdf : STM32F4-Discovery 用回路図の pdf ファイル | | | +-- LCD628.ce3 : bsch3v で書いた PIC16F628 用の LCD インターフェース回路図 | | | +-- LCD628.pdf : PIC16F628 用の LCD インターフェース回路図の pdf ファイル | | | +-- LCD1823.ce3 : bsch3v で書いた PIC16F1823 用の LCD インターフェース回路図 | | | +-- LCD1823.pdf : PIC16F1823 用の LCD インターフェース回路図の pdf ファイル | | | +-- LCD2313.ce3 : bsch3v で書いた ATtiny2313 用の LCD インターフェース回路図 | | | +-- LCD2313.pdf : ATtiny2313 用の LCD インターフェース回路図の pdf ファイル | +-- \mcu_lcd : 8 ビット MCU (PIC/AVR) によるキャラクタ LCD インターフェースのファームのフォルダ | | | +-- \PIC : PIC 版のフォルダ | | | | | +-- \lcd4pic : MPLAB 用の ASM プロジェクトのフォルダ (PIC16F628) | | | | | | | +-- lcd4pic.asm : ASM ソースファイル | | | | | | | +-- lcd4pic.hex : オブジェクトの HEX ファイル | | | | | | | +-- lcd4pic.m* : MPLAB 用ワークスペース/プロジェクト・ファイル | | | | | +-- \lcd1823 : MPLAB 用の ASM プロジェクトのフォルダ (PIC16F1823) | | | | | +-- lcd1823.asm : ASM ソースファイル | | | | | +-- lcd1823.hex : オブジェクトの HEX ファイル | | | | | +-- lcd1823.m* : MPLAB 用ワークスペース/プロジェクト・ファイル | | | +-- \AVR : PIC 版のフォルダ | | | +-- \lcd4avr : AVR Studio 4 / WinAVR 用の C プロジェクトのフォルダ (ATtiny2313) | | | +-- lcd4avr.c : C ソースファイル | | | +-- lcd4pic.a* : AVR Studio 用ワークスペース/プロジェクト・ファイル | | | +-- \default : オブジェクトのフォルダ | | | +-- lcd4avr.hex : オブジェクトの HEX ファイル | +-- \smf : デモ曲の SMF | +-- arabe_f1.mid : C.A.Debussy: アラベスク第一番 (SMF フォーマット 1) | +-- arabe_sp.mid : arabe_f1.mid を MIDI チャンネル当たり 1 音の発音に | なるように振り分けたもの (V1.2 の内蔵デモ曲の元) | +-- arabesq1.mid : C.A.Debussy: アラベスク第一番 (部分) (V1.1 以前用) | +-- Chopin66.mid : F.F.Chopin: 幻想即興曲 (部分) (V1.1 以前用) | +-- invent13.mid : J.S.Bach: インベンション第 13 番 (V1.1 以前用) ●コンパイル方法 もともとは、Atollic 製の無償版でコードサイズ制限のない TrueSTUDIO for STMicroelectronics STM32 Lite V2.3.0 を利用して開発していましたが、現在では、TrueSTUDIO for ARM V3.0 に統合され、 無償版では、リンクサイズ 32 K バイトに制限されてしまいました。 すでに V2.3.0 はダウンロードできなくなっており、TrueSTUDIO の無償版 (Lite V3.0) ではサイズ制限のためにコンパイル不可能となってしまいました。 そこで、プロジェクトのファイル構成は TrueSTUDIO V2.3.0 のままで、コンパイル 自体は、フリーの gcc ベースのツールチェインを利用して行えるように整備しました。 ●TrueSTUDIO Lite V2.3.0 でのコンパイル方法 TrueSTUDIO で STM32F4-Discovery 用の新規プロジェクトを立ち上げると自動生成される ファイルのうち、以下のものについては、Atollic のツールチェインでコンパイルして、 オブジェクトに組み込むのは良いが、(ソースを) そのまま、あるいは改変しての頒布は 禁止するという意味の記述がファイル中にあります。 main.c stm32f4xx_conf.h stm32f4xx_it.h stm32f4xx_it.c stm32_flash.ld そこで、stm32_flash.ld を除く 4 つのファイルは、STMicroelectronics が提供する 「STM32F4xx_DSP_StdPeriph_Lib_V1.0.0」ライブラリの「STM32F4xx_StdPeriph_Templates」 フォルダの中の gcc/ride7 用の対応するファイルと置き換え、必要な修正を施してあります。 「stm32_flash.ld」については、単に削除して、パッケージには含めてありません。 Atollic TrueSTUDIO でコンパイルする場合には、既存の STM32F4-Discovery 用プロジェクト からコピーして補ってください。 ただし、HEX ファイルで音色データを差し替えるためには、音色データが既知の位置に配置 されるように「stm32_flash.ld」ファイルに記述を 1 行追加する必要があります。 具体的には「Templates」フォルダにある「stm32f4xx_flash.ld」ファイルを参照して下さい。 コンパイル方法としては、まず、新規ワークスペースを生成します。 最初に開く「Information Center」ウィンドウの左下の方にある  「File, Import, General, Existing Projects to Workspace 」 リンクをクリックして開く「Import Projects」ダイアログの「Select root directory:」の 「Browse」ボタンを押して、ソースパッケージを展開して出来た「TGSTM32F4」フォルダを 指定します。 そして、「Finish」ボタンを押せばプロジェクトが読み込まれます。 あとは「stm32_flash.ld」を補って、メニュー・バーから「Project/Build All」を実行すれば コンパイルできます。 無償の Lite 版では、コンパイルで生成されるのは .elf ファイルまでで、.hex ファイルは 自動的には生成されません。 デバッガでの書き込みは .elf ファイルから行われますから、プログラムの書き込み/デバッグ だけなら特に .hex ファイルにまで変換する必要はありません。 ●gcc ツールチェインと Programmer's Notepad 2 によるコンパイル方法 まず、以下のリンクを参照して、gcc ツールチェインと Programmer's Notepad 2 (以下 PN2 と 略記) のセットアップを行って下さい。 「ねむいさんのぶろぐ」--「ARM マイコンを GCC でビルドする環境を整える (2012 年版)」 http://nemuisan.blog.bai.ne.jp/?eid=188089 ただし、コンパイル自体は必ずしも PN2 を使う必要はなく、直接に make することもできます。 PN2 を使う場合には、.pnproj との関連付けが出来ていれば、 TGSTM32F4/TGSTM32F4.pnproj をダブルクリックすれば PN2 が立ち上がり、プロジェクトの画面になります。 関連付けされていない場合には、まず PN2 を立ち上げ、メニュー・バーから 「File / Open Project(s)...」とクリックして開くダイアログで上記のプロジェクト・ ファイルを指定します。 左上の「Projects」ペインの「makefile」をダブルクリックしてエディタを開き、使用する ツールチェインのパスを設定します。 もとのねむいさんの makefile では、「echo.exe」を使ってメッセージを出していましたが、 echo を使っている部分は全てコメントアウトしてあります。 その他、OpenOCD ツールなど、今回の件に関係ない部分は大幅に削ってあります。 したがって、ツールチェインの gcc, ar, objcopy, objdump, size などと、make, rm だけ あればコンパイルできます。 PN2 の「Tool」の設定が済んでいれば、メニューから「Tool / MAKE ALL」でコンパイルでき ます。 オブジェクトは TGSTM32F4/Debug の下に作成されます。 PN2 を使わず、直接 make する場合には、GNU make が使える環境で $ cd TGSTM32F4 $ make のようにします。 その場合でも、あらかじめ makefile 中でツールチェインへのパスを正しく設定しておく必要 があります。 コンパイル時に、定義されているが使用されていない変数があるという意味のウォーニング・ メッセージがいくつか出ますが、プログラムの動作には問題ありません。 ●コンパイル時のオプション 「TGSTM32F4/src/STM32F4/TGSTM32F4.h」ファイル中の #define で設定する値によってプログラムの構成を 変更することができます。 定数名 意味 設定可能値 デフォルト STEREO_MODE ステレオ/モノラル切り替え 1 = ステレオ 1 0 = モノラル USE_SMF SMF シーケンサ使用フラグ 定義: SMF     定義 未定義:SMAF