LPC11U35/トラ技 ARM ライタ (3) -- FM音源プログラム TG11U35 (3)

LPC11U35 基板用のFM音源プログラム「TG11U35」に USB-MIDI 機能を追加しました。 近日中にソース・パッケージを公開します。
USB に関しては VID/PID の問題 (基本的に VID は「誰か」の所有物) があるので、パッケージに同梱するオブジェクト・ファイルは USB サポートのない版 (20140304 版と同等) とし、「空欄」になっているソースの VID/PID を埋めてコンパイルすると USB サポートのあるオブジェクト・ファイルができ上がるようにしたいと思っています。
USB-MIDI 機能は、ホスト → デバイス方向 (MIDI OUT) の片方向だけで、FM音源プログラムでは使用していない USART TXD 端子から出力します。
LPCOpen v2.03 の LPC11U37 用のサンプル・プロジェクト

nxp_lpcxpresso_11u37_usbd_rom_cdc_uart

を元に変更を加えたもので、LPC11U3x シリーズの内蔵 ROM API の USB ドライバを利用し、FM音源プログラム本体とは独立に動きます。
使用する ROM API

  • 「USB ドライバの初期化」
  • 「エンドポイント・ハンドラの登録」
  • 「デフォルト USB 割り込みサービス・ルーチン (ISR) の呼び出し」
  • 「エンドポイントからのデータ読み出し」

の 4 つだけで、「初期化」、「登録」が済めば、あとは USB/USART の割り込みをトリガとして、メインのプログラムには干渉せずに動作します。 (2014/03/10 追記: USB ISR の呼び出しを使っているのを忘れて、当初「3 つ」と書いていたのを修正しました。)
USB-MIDI 部分のプログラム・サイズは 1.6 Kバイトほどです。
USB 側から受け取った MIDI メッセージはソフトウェア内部でFM音源プログラム側に渡すことができますが、その場合にはFM音源プログラム側にも修正を加える必要があります。
そこで、簡単のため USB-MIDI OUT 機能は USART を介して「ハードウェア信号」として出力し、単なる USB-MIDI OUT 機能として使うならそのまま、FM音源プログラムの入力として使うなら USART TXD と USART RXD とを物理的に配線で接続し、「ループバック」して使うようにしました。
USB-MIDI 機能は本体のプログラムとは独立に動くので、本体へのインパクトとしては「CPU が喰われる」ことだけとなります。
そのオーバーヘッド量がどのくらいになるか心配していたのですが、システム・エクスクルーシブが大量に送られるような場合でも CPU を数 % 喰うぐらいで、同時発音数は 9 音のまま、減らさずにすみました。