FM音源プログラム TGLPC 暫定版第1版 readme 2009/4/9 pcm1723 ●はじめに このプログラムは、CQ 出版発行の「インターフェース」誌 2009 年 5 月号 付属の NXP LPC2388 マイコン基板「CQ-FRK-NXP-ARM」用の暫定版第1版の FM音源プログラムです。 非商用利用のみ許可します。 HEX のみのパッケージと、ソースリスト一式のパッケージがあります。 暫定版ですが、多くの部分は ADuC7026版や、V850版と同様なので、Web サイト http://www.geocities.jp/pcm1723/ のADuC7026版や、V850版の説明を参照してください。 Web からダウンロードした IAR Systems の開発環境「IAR Embedded Workbench for ARM, v.5.30, 32K Kickstart Edition」を使用してコンパイル しています。 含まれている音色データはフリーの「std.sb」から変換したものなので、上記 サイトの記述のように、「MA2 オーサリングツール」付属の音色データと差し 替えることをお勧めします。 ソースファイルの再コンパイルによらず、HEX ファイルの音色データ部分のみを 差し替える方法も用意してあります。 上記サイトの「音色データの差し替え/再コンパイルなしの差し替え」の項 http://www.geocities.jp/pcm1723/compile.htm#fmdata_4 を参照してください。 出来上がりのファイル名は TGLPC/Debug/Exe/TGLPCma.hex TGLPC/Debug/Exe/TGLPCma2.hex となります。 デフォルトのサンプリング周波数は 18 kHz で、同時発音数は 12 です。 各 MIDI チャンネルとも、モノモード、つまり、1チャンネルあたり1音しか 発音できません。 12 音を同時発音させるためには、12 MIDI チャンネルすべてを使う必要があり、 事実上、シーケンサーによる演奏に限られます。 通常のマルチティンバー音源では、MIDI チャンネル 10 はリズム音源のチャンネル ですが、本機ではリズム音源の機能はありません。 リズムデータを含む演奏データを再生する場合には、MIDI チャンネル 10 をオフ にして、リズムデータを送出しない設定にする必要があります。 暫定版なので LCD/キー入力機能がなく、実行時に同時発音数の切り替えは出来ません。 プログラムの設定部分を書き換え、コンパイル時に変更することは可能です。 通常の MIDI 入力 (31.25 kbps) と、シリアル MIDI 入力 (38.4 kbps) に対応して います。 プログラムを実行すると LED1 が薄暗く点灯します。 CPU 負荷が小さい時は明るく、負荷が大きい時は暗くなります。 デューティーを測定できるテスターで LED1 のアノード端子側を測定すると、 CPU 負荷率の大体の値が得られます。 負荷率はデモ曲演奏時で 75% 程度です。 ●ハードウェア 回路図「TGLPC_m3.pdf」を、HEX パッケージでは、この「readme.txt」ファイルと 同じフォルダ、ソース・パッケージでは「TGLPC\sch」フォルダに置いてあります。 V850 用に作成したベースボードを流用しているので、外部回路は +5V 電源で動作 させています。 外部 DAC などは +3.3V 電源での使用でも問題ありません。 オーディオ出力は内蔵 10 ビット DAC および、外付けのディジタル・オーディオ用 16 ビット・シリアル DAC で行っています。   コネクタ 2 (CN2) ピン 4 (P0.26/AD0.3/AOUT/RXD3) から内蔵 10 ビット DAC 出力を取り出します。 回路図では OP アンプによるバッファを設けてありますが、負荷が軽ければバッファ なしでもかまいません。 外部ディジタル・オーディオ DAC としては、ROHM 製の BU9480F と、NEC 製の uPD6376 を使用しています。 現在は、両方とも I2S モジュールの出力につないでいますが、将来は、BU9480F は、従来のように SPI 出力につなぐことを考えています。 I2S フォーマットの WS 信号を標準フォーマットの LRCK 信号に変換するのに D-FF (74HC74) を使った回路を使用していますが、タイミングスペック上は、 uPD6376 に対してはワーストケースの条件を満たしていますが、BU9480F に 対しては、ワーストケースの条件を満たしていません。 この変換回路について詳しくは Blog 「シンセ・アンプラグド」 http://d.hatena.ne.jp/pcm1723/ を参照してください。 入力は通常の MIDI 入力 (31.25 kbps) と、シリアル MIDI (38.4 kbps) に対応して います。 具体的なインターフェース回路は、Web サイトを参照してください。 インターフェース回路の「RxD」出力を コネクタ 2 (CN2) ピン 11 (SSEL/SSEL0/RXD1/P0.16) につなぎます。 回路図の コネクタ 3 (CN2) ピン 26 (P1.27/CAP0.1) に接続する「SENS」信号は、MIDI/シリアル MIDI のボーレート切り替えのためで、 オープンでシリアル MIDI (38.4 kbps)、10 kΩ以下の抵抗を介した GND への接続で 通常の MIDI (31.25 kbps)を選択します。 シリアル MIDI だけを使う場合には、何も接続せず、オープンで構いません。 この入力は LCD 出力と共用するので、将来は確実に変更されます。 現在は V850 用の配線をそのまま利用しているので、このピンを使用しています。 プログラムを実行すると、デモ曲を 3 曲自動演奏しますから、MIDI 入力はなくても 音は出ます。 つまり、CN2 ピン 4 からオーディオ信号を取り出せば、外部回路なしで CQ-FRK-NXP-ARM 基板単体から音が出ます。 ●パッケージ HEX パッケージと、ソース・パッケージを用意してあります。 いずれも、lzh 形式で圧縮されていますので、+Lhaca などのユーティリティーで 解凍してください。 オブジェクトの HEX ファイルは「TGLPC.hex」です。  このファイルを書き込みます。 「Flash Magic」を起動してマイコンに書き込んでください。 操作方法などはインターフェース誌の記事を参照してください。 ●HEX パッケージの内容 licence.txt : ライセンス条件のファイル readme.txt : このファイル TGLPC_m3.pdf : 回路図の pdf ファイル TGLPC.hex : プログラムの HEX ファイル ●ソース・パッケージの内容 パッケージを解凍すると、「TGLPC」フォルダの下にファイルが展開されます。 以下では、TGLPC フォルダを基準に話を進めます・ \TGLPC | +-- readme.txt : このファイル | +-- licence.txt : ライセンス条件のファイル | +-- \gen_tab : テーブル定義ファイル作成用ツール | | | +-- Makefile : テーブル一括生成のためのメイクファイル | | | +-- *.c : C ソースファイル | | | +-- *.awk : gawk ソースファイル | +-- \src : ソースファイルフォルダ | | | +-- *.c : C ソースファイル | | | +-- *.h : ヘッダ・ファイル | +-- \prj : プロジェクトファイルのフォルダ | | | +-- TGLPC.* : 各種ファイル | | | +-- \settings : 各種ファイルのフォルダ | | | +-- TGLPC.* : 各種ファイル | +-- \sch : 回路図のフォルダ | | | +-- TGLPC_m3.ce3 : bsch3v で書いた回路図 | | | +-- TGLPC_m3.pdf : 回路図の pdf ファイル | +-- \smf : デモ曲の SMF | | | +-- arabesq1.mid : C.A.Debussy: アラベスク第一番 (部分) | | | +-- Chopin66.mid : F.F.Chopin: 幻想即興曲 (部分) | | | +-- invent13.mid : J.S.Bach: インベンション第 13 番 | +-- \Debug    : コンパイラ出力のフォルダ | +-- \List : リストファイルのフォルダ | +-- \Obj : オブジェクトファイルのフォルダ | +-- \Exe : hex ファイルのフォルダ | +-- TGLPC.hex : FM音源プログラムのオブジェクト ●コンパイル方法 ソースファイルを解凍する場所は、どこでも構いません。 もちろん、パッケージ作成時の環境とは違いますが、ビルド時に修正されます。 ●プログラム本体のコンパイル方法 まず、「IAR Embedded Workbench IDE」のメニューの「File/Open/Workspace...」 で起動されるダイアログで <ファイルを解凍したフォルダ>\TGLPC\prj\TGLPC.eww を指定してプロジェクトを開きます。 そして、「Project/Rebuild All」を実行すればコンパイルできます。 このとき、未使用の変数に関する警告が出ますが、問題はありません。