V850付録基板でOgg Vorbisプレイヤー(12)
Posted by arms22 on 2007年07月12日

Ogg Vorbisプレイヤーの再生処理を割り込み使った1バイトずつの転送方式からDMAを使った自動転送に変更しました。DMAを使うことで割り込み処理のオーバーヘッドをなくすことができます。
※相変わらず22KHz-16bit-stereoデータのデコードは再生に間に合っていませんが。。
DMAを使った再生処理は次のようになっています。
1.FIFO空き確認
2.OggVorbisファイルをデコード
3.デコードしたデータをFIFO(内蔵RAM)にコピー
4.FIFO(内蔵RAM)のアドレスをDMAの転送元アドレスに設定
5.DMA転送カウント数を設定
6.DMAが止まっていたらDMA転送開始
7.TQ0カウント開始
8.DMA転送完了割り込みでFIFOのリードポインタを更新
9.'1'から'8'をOggVorbisファイルの終わりまで繰り返します
FIFOのサイズは片チャンネルあたり4096バイトです。1回のDMA転送で1024バイト転送します。1024バイトの転送毎にDMA転送完了割り込みが発生します。DMA転送完了割り込みでFIFOのリードポインタを更新し、転送済みのデータを破棄。FIFOに空きを作ります。
DMAの設定は次のようになっています。
チャンネル | 転送元 | 転送先 | 起動要因 | |
DMA0 | Lch | 内蔵RAM | DA0CS0 | INTTQ0CC0 |
DMA1 | Rch | 内蔵RAM | DA0CS1 | INTTQ0CC1 |
LチャンネルにはDMA0を使用、RチャンネルにはDMA1を使用します。
DMA0の転送先にはDACの出力レジスタDA0CS0を設定、DMA1にはDA0CS1を設定します。
DMA0の起動要因はINTTQ0CC0を設定、DMA1にはINTTQ0CC1を設定します。
TQ0はインターバルタイマに設定します。
TQ0CCR0に再生サンプリング周波数で一致するように値を設定します。
TQ0CCR1にはTQ0CCR0からDMAの読み書きサイクル分11cycleを引いた値を設定します。
現在のOggVorbisPlayerのソースコード http://xfind.hp.infoseek.co.jp/electric/oggplayer/OggVorbisPlayer_7_12.zip
Ads by Google
0 Comments
Leave a reply
該当の記事は見つかりませんでした。