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