I2S Codecをmbedで制御しましたよ
僭越ながら、東京工業大学で行われるMAKE: Tokyo Meeting 06に参考出展させて頂きます。
今回はmbedグループのいち趣味人として、NXPセミコンダクターズ様、(株)日本サーキット/きばん本舗様、GPS Labo様、CuBeatSystems様 その他の方々と共同出展致します。
近くにお越しの際にはどうぞお立ち寄り下さいませ。
私「Lynx-EyEDの電音鍵盤」は、"怨瞥怒::蔵人—mbed cloud—" (読み:えんべっど くらうど)という邪悪なネーミングで、その中のどこかに小さく隠れていると思うので捜さないでください。(ぁ?
出展するものは1点で、これです。
I2S Codec + mbed ロスレスオーディオデコーダ
このガジェットの概略です。mbed祭りの時と比べて僅かながら改良を施しました。
- DAC変更:標準フォーマット仕様「BU9480F」(ローム) → I2Sフォーマット仕様「TLV320AIC23B」(テキサス・インスツルメンツ) に変更
- ドライバ:I2SのドライバをNXPセミコンダクタ提供のlpc17xx.cmsis.driver.libraryを参考にmbed向けに記述
- 割り込み:LPC1768内蔵のI2S_TXに8ワードFIFOが使用できるようになったため、割り込みが1/8に低減された
- I2S設定:I2Sハードウェアの初期化はTLV320TLV23Bをマスタ、mbedをスレーブとしている*1
- サンプリング周波数:32kHz、ステレオ固定
- オーディオフォーマット:2次非線形予測 + Rice-Golomb符号化圧縮
- テキストファイルによるプレイリストの導入
TLV320AIC23Bは決して新しく無いI2S Codecですが、SSOP28ピンで扱いも容易なので人気が高く、応用例も豊富なので情報が入手しやすいのが利点です。MMCodec01の回路を参考にしました。SPIハードウェア/ピンをSDCardとI2Sが陣取っていますのでCodec制御用にI2Cを利用しています。なお、I2Cを利用するためTLV320AIC23B端子を
MODE → Low CS → Low
に設定しました。AIC23BはWriteモードしか無いのでこのピン設定のときの8bit長アドレスは52(10進数)となります。今回はヘッドホン用出力を利用しています。
なお、I2S Codecの制御ルーチンの例として、32kHzのリニアPCMを再生するコードをこちらに記述しました。ザックリとした大まかなものですので適宜改良を加えてご使用下さい。
なお、LPC17xxのI2Sペリフェラルを使用する際に、NXPセミコンダクターズの以下のマイクロコントローラー&デジタルオーディオ スペシャリストの方々から、LPC17xxエラータ情報、PCLK制御方法、マスタ/スレーブ初期化その他多くの助けを借りて、MTM06前にメドをつける事ができました。
・岡野彰文 氏 (くまちゃん♡)
・畦地雅義 氏 (師匠!)
・Yoichi Kimura 氏 (nopainnogain1)
心から御礼申し上げます。MTM06でもよろしくお願い致します。
ではMTM06でお会いできる事を心待ちにしております。
*1:mbedはI2S通信に必要なMCLK端子がDIPに出ていないため、MCLKを使用しなくても良いモードにした