マイコン工作実験日記

Microcontroller を用いての工作、実験記録

AACも追加しよう

2009-11-27 22:56:49 | Weblog
MCIドライバのバグも見つかってひと安心したので、さらなる機能追加をしようと思います。現在のところのコードサイズはこんな↓もんです。



コードは全部ARMモードなんですけど、それでも200KBほどしか使っていません。まだフラッシュは300KBも残っています。そこで、コードサイズが増えそうな機能拡張としてAACデコーダを追加しようと思います。我が家でもカミサンのiTuneライブラリから曲データを拝借するには、MP3よりもAACの方が都合がいいですし。

デコーダとしてはMP3と同じく、HelixにあるAACデコーダが使えそうです。MP3と比べるとCPUを喰いそうなのですが、MP3再生には半分くらいしかCPUを使わないことが確認できたので、良く知りませんがSBRとかいうのを使わなければ、AACも楽勝でしょう。SBRはRAMも使うようなので、CPUが間に合ってもメモリでアウトになりそうですし。

ちょっと検索してみたら、やはりARMでMP3/AACの両方を載せている人がいました。しかも、AT91SAM7を使っているじゃないですか。がんばってるなぁ。おまけに、ChaNさんのFatFs使ってるし、この人も赤外線リモコン使えるようにしているようです。まぁ、だいたい皆さん同じような事を考えるということですね。もっとも、FatFsはATMELがAT91SAMシリーズ用のライブラリ(at91lib)の中に含めているくらいなので、ATMELユーザにとっては世界的にお馴染みであるとも言えます。

記事に目をとおしてみましたが、やはりAT91SAM7Sではかなり苦労して動かしているようで、CPUを喰うルーチンはSRAMに配置するようにしているようです。AT91SAM7は個人的には大変好みのデバイスなのですが、LPC2000シリーズと比べた時の最大の欠点はフラッシュからのコードの実行が遅いことです。AT91SAM7はデバイスにより最大55MHz~60MHzのクロックでの動作が可能なのですが、フラッシュのコードを実行する場合には、クロック30MHz以上ではウエイトの挿入が必要になってしまいます。ウエイト無しで動作できるのは、内蔵SRAMのコードを実行する時になるので、処理時間を短縮するためには、コードをSRAMに再配置する必要があるのです。それに比べてLPC2388は、MAMの機能により内蔵フラッシュのコードもARMモードであっても高速に実行できるので、大助かりです。AT91SAM7にもフラッシュのキャッシュ機能はあるのですが、バッファが小さいためにThumbモードでしかご利益がありません。

ともかく、この人のコードを見れば、AACデコーダの使い方が簡単にわかりそうなので、使わせていただくつもりです。