マイコン工作実験日記

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

CODEC MCLK用2.048MHz

2008-01-02 01:19:21 | W-SIM
CODECではマスタークロック(MCLK)として、2.048MHzのクロックが必要とされます。64K回線32ch分、E1相当の周波数ですね。TDMバスでは標準的に使用される周波数なのでしょうか?

さて、この2.048MHzクロックを用意するのに水晶発振回路を組むのも面倒なので、なんとか用意できないか検討してみました。SAM7-H256ではMAINCKとして18.432MHzの水晶を使っていますので、ちょうど2.048MHzの9倍になっています。PMC(Power Management Controller)のクロック生成機能が使えればベストだったのですが、あいにくと8分周とか16分周はできても、9分周はできません。

TimerやPWMを使ってクロックを生成してやれば、分周率は自由に設定できるようになりますが、周期毎の反転出力となるため元クロック(MCK)として2.048MHzの偶数倍が必要となってしまいます。USBを使う都合上MCKは48MHz近辺になっていますので、やはり半端です。しょうがないので、AT91SAM7S256のPLLの設定を次のように変更することとしました。
PLLOut = 18.432MHz / 9 * 48 = 98.304MHz
MCK = PLLOut / 2 = 49.152MHz

MCKとともにUSB用のクロックも48MHzからはずれてしまうので、UDPが使えないことになってしまいますが、あきらめることにします。48分周でPWM0出力を反転させてDuty cycle 50%のCODEC用MCKとすることとしました。2.048MHzにこだわったところで、もともとPCMCLKが合わないので、ちゃんと音が出るようになるわけではないのですが、CODECを置き換える時の準備として作業を進めておきます。

CODECをつなげてみた

2008-01-01 11:34:01 | W-SIM
PCMCLKの周波数が合わないことは承知のうえで、TLV320AIC1110を載せて、とりあえずSpeakerをつなげてみました。結果、音は鳴りますが、ブツブツとしているうえに周波数が高くずれている感じで何をいっているのか聞き取り困難な状態です。一応、CODEC付ければ、簡単にSpeaker/Micをつなげられることが確認できたということで満足です。こんなチップ使ったのは初めてだし。

このCODECチップは、I2C経由でMic/Speakerの選択や音量調節ができますが、AT91SAM7でI2Cを使ってみるのは、今回が初めてでした。ATMELのTWIは以前MEGA48で使った時に、状態遷移を管理する必要があり面倒だった記憶があるのですが、AT91SAM7のTWIは素直で使いやすいものでした。改めて気が付いたのは、TWIではDMAが使えないこと。今回のCODECのようにレジスタを単独で読み/書きする程度の用途ならDMAは使わないのですが、AT91SAM7ではA/Dを含むほとんどのI/OでDMAが使えるので、逆に新鮮に感じてしまいます。


写真ではスピーカと(空中配線の)イヤホン端子がつながっていますが、音声出力先の切り替えもI2Cでできます。DEBUGシリアルのコンソールからコマンドで音量とともに切り替えられるようにしましたが、イヤホンでも音がおかしいのは同じです。基板の上半分は液晶を載せるつもりでスペースを開けてあります。また、DEBUGシリアルのUSB変換部分は使いまわしのために、別基板としました。