マイコン工作実験日記

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

FREQMを使ってFsを計ってみる

2013-06-04 23:07:47 | SAM4
前回の記事では、IISCを使ってI2Sデータが受信できることを確認しました。今回は、IISCのワードクロック周波数を別の方法で確認してみることにします。

SAM4LにはFREQM (Frequency Meter)という機能が備わっており、指定したクロックの周波数を計測することができます。仕掛けとしてはタイマーとカウンターを組み合わせて使うようなもので、基準となる既知速度のクロックを使って計測時間を設定し、その期間に測定対象のクロックが何回入るかをカウントするというものです。

既知のクロックとしては、32Kクリスタルを追加で実装して、これを使用。IWS端子に入るクロックを直接計測することはできないので、IWS端子をGCLKへの入力となるGCLK_IN1端子とつないでおきます。そして、GCLK_IN1に入ったクロックをGCLK2として出力するように、SCIFを設定してやります。こうすれば、GCLK2の出力をFREQMで計ることができますので、IWSの周波数を調べられることになります。



音楽が流れ始めるとWT32からクロックが出て、再生を止めるとクロックも止まることが確認できました。周波数値としては、44100と出て欲しいところですが、計測時間が短く基準クロックの32KHzが対象クロックの44.1KHzに近いこともあり、この実験では44040が精一杯の値です。

IISCをつなげる

2013-06-01 01:09:40 | SAM4
SAM4LとWCA-009の間のシリアルはつながったので、続いてオーディオ信号です。今回は、I2Sを使ってつなぎます。

SAM4LにはI2S用のインタフェースとしてIISC (Inter-IC Sound Controller)が備わっているので、これを使います。IISCで受信したデータは、ABDACB(Audio Bit Stream DAC)を使って再生する計画。SAM4Lではペリフェラル間でCPUを介さずに直接DMAすることはできないので、いったんCPUのメモリを介してDMAする必要があります。このあたりの制約は、SAM7/SAM3と同じですね。



I2Sでつなぐには、どちらをマスターにするかを決めねばなりません。今回も、WT32側をマスターとして、上図のように接続しています。SAM4L側をマスターにすると、クロックの生成が必要になりますが、IISCのクロック源として使用するGCLK6はABDACBのクロック源ともなっています。GCLK6をABDACBの要求するクロック速度にしてしまうと、IISCからWT32に対して供給するクロック速度としては適さなくなってしまうので、IISCはスレーブ側にせざるを得ないという事情もあります。

WT32側は2点の設定が必要です。
  1. PSTOOLをつかって、PSKEY_DIGITAL_CONFIGの値を0x0406に設定。これで16ビット左詰めのデータフォーマットを選択します。
  2. iWRAPで SET CONTROL AUDIO I2S I2Sを設定し、I2Sマスターモード動作を選択。
ソフトの方は、まずはIISCの動作確認から始めることとします。DMAの割り込みをかけてみて受信フレーム数にみあう割り込みがかかるかどうかを調べてみました。128サンプル毎にDMAすることとし、およそ10秒間受信してみました。



受信しているMP3を再生したデータは44.1Kサンプル/秒ですので、44100 × 10 / 128 = 3445回の割り込みが発生するはずです。測定実験は手動でおこなっていますので、この程度の誤差は生じるでしょうから、問題無く受信できている見て良いでしょう。現在は単に空読みしているだけですが、これをABDACに流してやれば音を出せるハズです。