FM音源プログラム TGSTCQ/TGSTBEE/TGSTBM readme 2010/09/19 pcm1723 ●はじめに このプログラムは、 CQ 出版「デザインウェーブマガジン」誌 2008 年 5 月号付属 STMicroelectronics STM32F103VB マイコン基板「CQ-STARM」 Strawberry Linux 製 STM32 マイコン・ボード「STBee」 Strawberry Linux 製 STM32 マイコン・ボード「STBee Mini」 用の暫定版のFM音源プログラムです。 非商用利用のみ許可します。 内容的には、暫定第 2 版の「TGSTARM」プログラムと同一で、「STBee Mini」 ボードに合わせて回路の一部を変更し、gcc ベースの C コンパイラで コンパイルできるように修正を加えました。 これらのボードには、STMicroelectronics 社製の STM32F103 ファミリの チップが搭載されており、基本的にプログラムはバイナリ・レベルで互換ですが、 外部クリスタルの周波数 (8 MHz / 12 MHz)、LED が接続されているポートなど、 ボードの細部には相違があるので、オブジェクトはそれぞれのボード専用と なっています。 「STBee」と「STBee Mini」については、現物を持っていないので動作の確認は していません。 ソースファイルは一組で、make 時の設定により、それぞれ TGSTCQ.hex TGSTBEE.hex TGSTBM.hex の 3 種のオブジェクトのいずれかを生成します。 ROM サイズは 39 Kバイト程度、RAM サイズは 17 Kバイト程度です。 オブジェクトの hex ファイルは、上の 3 種のボードに共通する USB 経由の 「DFU」機能を利用して書き込みます。 JTAG/SWD 経由での書き込みについては、JTAG/SWD ツールを持っていないので 未確認です。 STBee Mini の場合には、デフォルトで JTAG 用ポートとして割り当てられている PA15 に LED が接続されているので、PA15 を出力ポートとして使えるように、 プログラム中で「JTAB disable / SWD enable」の設定に変更しています。 そのため、SWD は使えますが、JTAG は使えない状態になります。 また、SWD 用のポートである PA14 を USB のプルアップ用として使う回路になって いるので、USB と SWD は両立しません。 HEX のみのパッケージと、ソースリスト一式のパッケージがあります。 暫定版ですが、多くの部分は ADuC7026版や、V850版と同様なので、Web サイト http://www.geocities.jp/pcm1723/ のADuC7026版や、V850版の説明を参照してください。 ●機能の概要 含まれている音色データはフリーの「std.sb」から変換したものなので、上記 サイトの記述のように、「MA2 オーサリングツール」付属の音色データと差し 替えることをお勧めします。 ソースファイルの再コンパイルによらず、HEX ファイルの音色データ部分のみを 差し替える方法も用意してあります。 上記サイトの「音色データの差し替え/再コンパイルなしの差し替え」の項 http://www.geocities.jp/pcm1723/compile.htm#fmdata_4 を参照してください。 使用するボードにより、gen_tab フォルダ内の Makefile の「OBJ_NAME」設定を 変更する必要があります。 出来上がりのファイル名は、TGSTCQ の場合には src/TGSTCQma.hex src/TGSTCQma2.hex です。 TGSTBEE/TGSTBM の場合も同様に「ma」、「ma2」が付いたファイル名となります。 デフォルトのサンプリング周波数は 18 kHz で、同時発音数は 16 です。 各 MIDI チャンネルとも、モノモード、つまり、1チャンネルあたり1音しか 発音できません。 16 音を同時発音させるためには、16 MIDI チャンネルすべてを使う必要があり、 事実上、シーケンサーによる演奏に限られます。 通常のマルチティンバー音源では、MIDI チャンネル 10 はリズム音源のチャンネル ですが、本機ではリズム音源の機能はありません。 リズムデータを含む演奏データを再生する場合には、MIDI チャンネル 10 をオフ にして、リズムデータを送出しない設定にする必要があります。 暫定版なので LCD/キー入力機能がなく、同時発音数の切り替えは出来ません。 通常の MIDI 入力 (31.25 kbps) と、シリアル MIDI 入力 (38.4 kbps) に対応して います。 プログラムを実行するとボード上の LED が薄暗く点灯します。 CPU 負荷が小さい時は明るく、負荷が大きい時は暗くなります。 STBee / STBee Mini の場合は、デューティーを測定できるテスターで LED の カソード端子側を測定すると、CPU 負荷率の大体の値が得られます。 CQ-STARM の場合には、LED のアノード側でデューティーを測ると、CPU の空きの 比率を測定することになり、負荷率としては 100 % から測定値を引いたものとなります。 負荷率はデモ曲演奏時で 80 % 程度です。 ●ハードウェア 回路図「TGSTCQ.pdf」、「TGSTBM.pdf」を、HEX パッケージでは、この「readme.txt」 ファイルと同じフォルダ、ソース・パッケージでは「TGSTB\sch」フォルダに置いて あります。 STBee 用の回路図は用意してありません。 オーディオ出力は PWM を利用した DAC および、16 ビット・シリアル入力のディジタル・ オーディオ用 DAC の BU9480F に対応しています。 簡易的な処理なので、BU9480F 以外の DAC では音が出ない可能性があります。 PWM の繰り返し周波数は約 70 kHz です。   CQ-STARM: コネクタ 2 (J2) ピン 10 (PB8)   STBee: コネクタ 4 (CN3) ピン 37 (PB8)   STBee Mini: ピン 12 (PB8) にローパスフィルタをつないでオーディオ出力を取り出します。 Web サイトには LPF の例 (3 次 Sallen-Key アクティブフィルタおよび 3 次 LC パッシブフィルタ)を載せていますが、簡単な一次 RC フィルタでも、PWM 周波数は 可聴周波数域外ですから、耳で聞く限りは問題ありません。 BU9480F のピンと STM32 側の接続は次のようになります。 BU9480F STM32 ---------------- -------------- LRCK (ピン 5) PB1/TIM3_CH4 SDAT (ピン 6) PB15/SPI2_MOSI BCLK (ピン 7) PB13/SPI2_SCK 入力は通常の MIDI 入力 (31.25 kbps) と、シリアル MIDI (38.4 kbps) に対応して います。 具体的なインターフェース回路は、Web サイトを参照してください。 インターフェース回路のマイコン側「RxD」出力を CQ-STARM: コネクタ 2 (J2) ピン 26 (PA10/USART1_RX) STBee: コネクタ 4 (CN4) ピン 13 (PA10/USART1_RX) STBee Mini: ピン 32 (PA10/USART1_RX) につなぎます。 サウンドボート用のいわゆる MIDI ケーブルは +5V 用ですが、GRAVIS ULTRASOUND の MIDI 接続ボックスで試したところ、+3.3V 電源でも動作しました。 回路図の CQ-STARM: コネクタ 3 (J3) ピン 36 (PA8) STBee: コネクタ 4 (CN4) ピン 11 (PA8) STBee Mini: ピン 30 (PA8) に接続する「SENS」信号は、MIDI/シリアル MIDI のボーレート切り替えのためで、 オープンでシリアル MIDI (38.4 kbps)、10 kΩ以下の抵抗を介した GND への接続で 通常の MIDI (31.25 kbps)を選択します。 シリアル MIDI だけを使う場合には、何も接続せず、オープンで構いません。 もとの「TGSTARM」プログラムでは PC3 を使うようになっていましたが、STBee Mini では、ポート A とポート B しか利用できないので、PA8 に変更しました。 プログラムを実行すると、デモ曲を 3 曲自動演奏しますから、MIDI 入力はなくても 音は出ます。 ●パッケージ HEX パッケージと、ソース・パッケージを用意してあります。 いずれも、zip 形式で圧縮されていますので、Windows 自体の機能で解凍できます。 オブジェクトの HEX ファイルは、CQ-STARM 用、STBee 用、STBee Mini 用、それぞれ TGSTCQ.hex TGSTBEE.hex TGSTBM.hex です。 このファイルを書き込みます。 まず、「DFU File Maneger」を起動し、.hex ファイルから .dfu ファイルに変換し、 次に「DfuSe Demonstration」を起動してマイコンに書き込んでください。 あるいは、Strawberry Linux の web サイトに用意されているコマンドライン版 書き込みユーティリティー「dfuw」を使用することもできます。 ●HEX パッケージの内容 licence.txt : ライセンス条件のファイル readme.txt : このファイル TGSTCQ.pdf : CQ-STARM 基板の回路図の pdf ファイル TGSTCQ.hex : CQ-STARM 基板用プログラムの HEX ファイル TGSTBEE.hex : STBee 基板用プログラムの HEX ファイル TGSTBM.pdf : STBee Mini 基板の回路図の pdf ファイル TGSTBM.hex : STBee Mini 基板用プログラムの HEX ファイル ●ソース・パッケージの内容 パッケージを解凍すると、「TGSTB」フォルダの下にファイルが展開されます。 以下では、TGSTB フォルダを基準に話を進めます・ \TGSTARM | +-- readme.txt : このファイル | +-- licence.txt : ライセンス条件のファイル | +-- \gen_tab : テーブル定義ファイル作成用ツール | | | +-- Makefile : テーブル一括生成のためのメイクファイル | | | +-- *.c : C ソースファイル | | | +-- *.awk : gawk ソースファイル | +-- \src : ソースファイルフォルダ | | | +-- TGSTCQ.hex : CQ-STARM 基板用の hex ファイル | | | +-- TGSTBEE.hex : STBee 基板用の hex ファイル | | | +-- TGSTBM.hex : STBee Mini 基板用の hex ファイル | | | +-- *.c : C ソースファイル | | | +-- *.h : ヘッダ・ファイル | | | +-- stm32f103_hd_flash_offset.ld : LD スクリプト | | | +-- Makefile : GNU make 用メイクファイル | +-- \lib : ライブラリ関係ファイルのフォルダ | | | +-- \inc : STMicro 提供のインクルードファイルのフォルダ | | | | | +-- *.h : 各種インクルードファイル | | | +-- \CMSIS : CMSIS 関係のファイルのフォルダ | | | +-- License.doc : CMSIS のライセンス条件のファイル | | | +-- \Core | | | +-- \CM3 | | | +-- startup_stm32f10x_hd.o : スタートアップファイルのオブジェクト | +-- \sch : 回路図のフォルダ | | | +-- TGSTCQ.ce3 : bsch3v で書いた CQ-STARM 基板用の回路図 | | | +-- TGSTCQ.pdf : CQ-STARM 基板用回路図の pdf ファイル | | | +-- TGSTSTBM.ce3 : bsch3v で書いた STBee Mini 基板用の回路図 | | | +-- TGSTSTBM.pdf : STBee Mini 基板用回路図の pdf ファイル | +-- \smf : デモ曲の SMF | +-- arabesq1.mid : C.A.Debussy: アラベスク第一番 (部分) | +-- Chopin66.mid : F.F.Chopin: 幻想即興曲 (部分) | +-- invent13.mid : J.S.Bach: インベンション第 13 番 ●コンパイル方法 C コンパイラは、CodeSourcery 製の gcc ベースのツールチェインである 無償版の「Sourcery G++ Lite for ARM EABI」を使用しています。 Makefile や LD スクリプトについては、STBee Mini 用のサンプルプログラム 「mini-demo」に付属のものを修正して流用しています。 「Sourcery G++ Lite」のインストール方法およびサンプルプログラムについては Strawberry Linux の web サイトを参照してください。 ソースファイルを解凍する場所は、どこでも構いません。 TGSTB/src フォルダに移動して、Makefile の先頭付近にある TARGET = TGSTBM などと定義してある部分で、目的のターゲットのみを活かし、他のふたつのターゲットは コメントアウトします。 そして、 make とすれば、コンパイルされて hex ファイルができあがります。 元の「TGSTARM」プログラムは、商用コンパイラのオブジェクト・サイズ制限のある無償版 を利用して作成していた関係で、内蔵ペリフェラルの初期化などは STMicro 提供の ライブラリは使わず、すべて「自前」でポートを直接叩いて設定していました。 今回のコンパイラ変更により、サイズ制限はなくなりましたが、現在のところ初期化部は 大きく変更せず、以前のままのライブラリを使わない形になっています。 STMicro 提供のライブラリ・ファイルのなかで、ポート定義のインクルード・ファイル だけを利用しており、ソース・パッケージに含まれるインクルード・ファイルも古い バージョンのものなので、最新版に差し替えると、コンパイルがうまく行かない可能性 があります。