はじめに
PSoC 6 Wi-Fi BT試作キット(CY8CPROTO-062-4343W)は、PSoC 6開発のエントリーキットとして、安価に入手できる製品です。特長の1つとして、40mm間隔で配置された2つのPDMマイクが搭載され、ステレオオーディオのサンプリングが可能です。これらのサンプル値は、PDM-PCMコンバータ周辺機器によって得られますが、このチュートリアルでは、標準レートの44.1kHz(オーディオCDと同じレート)でサンプル値を収集するように設定されます。
ModusToolboxは、PSoC 6 SDKとModusToolbox IDEを含むPSoC 6ファミリの開発環境で、それ自体、ハードウェアと一部のミドルウェアのためのコンフィギュレータをいくつか含んでいます。メインコンフィギュレータであるDevice Configuratorは、機器のシステム機能や周辺機器の設定に必要な労力を大幅に削減します。開発者はグラフィカルなインターフェースを使ってパラメータを設定することができ、そしてツールはCコードを生成する前に、引数のいずれかが無効である場合に警告/エラーを発生させます。もちろん、これは開発者側の作業が不要であることを意味するものではありません。Device Configuratorは完璧とは言い難く、最も基本的なペリフェラル以外はArchitecture Technical Reference Manual(TRM) を参照する必要がある場合がほとんどです。これらの点については、次のチュートリアルで説明します。
手順
PDM-PCMペリフェラルの設定
最も簡単なステップから始めましょう。TRMの表31-1は、いくつかの標準的なサンプリングレート(fs)に対するPDM-PCMコンバータのタイミングパラメータの設定方法を例示しています。
fs = 44.1kHzの値をDevice Configuratorに入力するには、ModusToolbox IDEでプロジェクトのdesign.modusファイルをダブルクリックします。「Peripherals」タブで「Digital」リソースを展開し、「PDM-PCM Converter 0」を選択します。「Parameters」ウィンドウで、Timingパラメータまでスクロールダウンし、以下の図1に示すように値を入力します。TRMの表31-1に誤りがあることに注意してください。fs = 44.1kHzのTotal Divisor Ratioは32ではなく、16とすべきです。この値はDevice Configuratorに直接入力しないため、設定に影響はありませんが、それでも混乱することがあります。
図1: PDM-PCMコンバータのタイミングパラメータ
3つのクロック除数は、外付けPDMマイクのクロックとして使用されるPDM_CKOクロック信号を以下のように生成します。
f_{PDM\_CKO}=\frac{f_{CLK−HF[1]}}{(CLK\_CLOCK\_DIV+1)(MCLKQ\_CLOCK\_DIV+1)(CKO\_CLOCK\_DIV+1)}
=\frac{45.1584 MHz}{(0+1)(1+1)(7+1)}=\frac{45.1584 MHz}{16}=2.8224 MHz
次に、SINC_RATEは、次の式に従って fsを決定します。
f_s=\frac{f_{PDM\_CKO}}{2∗SINC\_RATE}=\frac{2.8224 MHz}{2∗(32)}=.0441 MHz
このチュートリアルでは取り上げませんが、PDM-PCMコンバータには、チャンネル設定、フィルタ設定、割り込みトリガなど、他にも設定すべきパラメータがいくつかあります。これらの属性の詳細については、TRMを参照してください。
ペリフェラルクロックの設定
さて、ここからがややこしいところです。 fCLK-HF[1] = 45.1584MHz を得るにはどうすればよいのでしょうか? TRM のセクション 31.2.3 では、PLL(Phase-Locked Loop)と組み合わせた外部水晶発振器(ECO)を 1 つのソリューションとして紹介しており、これが非常にうまく機能すると思いました。CLK-HF1クロックの設定を変更するには、Clockパラメータのチェーンリンクアイコンをクリックします(図2)。
図2: リンクされたクロック信号の設定にジャンプ
これにより、特にシステムクロックを設定できる「プラットフォーム」タブが表示されます。タブの中央には、どのクロックエレメントが有効で、それらがどのように互いに接続されているかを示すインタラクティブなクロックダイアグラムが表示されるはずです。TRMの例に倣い、図3のように内部接続を行うようにします。
図3: 希望するエレメントの接続をハイライトしたクロックダイアグラム
パスの先頭から始めて、ECOを設定します。ECOのボックスが緑色になっていない場合は、クロックダイアグラムでダブルクリックして有効にしてください。「Parameters」ウィンドウには、変更可能なパラメータがいくつか表示されていることに注意してください。これらは、ボード上の外部水晶の特性で、CY8CPROTO-062-4343WではTXCの34.4064MHz水晶を使用しています。品番は8Y34470001で、TXC 8Yシリーズのデータシートには、ECO周辺機器の設定に必要な情報がすべて記載されています。しかし、「周波数(MHz)」の欄に34.4064を入力してスタートしようとすると、次のような警告が表示されます。
Unable to evaluate parameter ‘Frequency (MHz)’ on personality ‘ECO’. ‘34.41’ is not within the legal range of [4.00-33.33] for parameter ‘Frequency (MHz)’ (パーソナリティ「ECO」のパラメータ「周波数(MHz)」が評価できません。パラメータ「周波数(MHz)」の「34.41」が[4.00-33.33]の有効範囲内に入っていません。)
これは34.41の代わりに33.33を入力しても周辺機器は正常に動作するため、致命的なエラーではありませんが、後述する理由で、かなり厄介です。これと残りの値を入力すると、図4に示すようにECOの設定が表示されるはずです。
図4: 最終のECOの設定
パスの次は、PATH_MUX2マルチプレクサです。クロックダイアグラムでこのエレメントをクリックすると、そのパラメータが表示されます。Source Clockの値として「ECO」を選択します(図5)。
図5: 最終のPATH_MUX2の設定
次に、クロックダイアグラムの PLL1エレメントをクリックし(有効になっていない場合はダブルクリック)、「Parameters」ウィンドウを表示させます。ここで、ECO周波数を33.33MHzと入力した結果として、再び悩まされることになります。Source Frequencyは自動的に33.33MHzで入力されることに注意してください。これは、Device Configuratorが考えるPLL基準クロック周波数(fref)です。コンフィギュレータは以下の計算を行い、PLLの出力周波数(Actual Frequencyフィールドに表示されます)を決定します。
f_{out}=\frac{f_{ref}∗FEEDBACK\_DIV}{REFERENCE\_DIV∗OUTPUT\_DIV}
デフォルトでは、Configurationパラメータは「Automatic」に設定されています。つまり、希望の出力周波数を入力すれば、Device Configuratorが上記の式を満たす最適な分周器のセットを決定してくれるのです。しかし、実際のfref値である34.4064MHzではなく、33.33MHzのfref値で計算されることに注意してください。したがって、Desired Frequency(MHz)のフィールドに45.1584を入力することはできず、次のように計算した調整値を使用する必要があります。
\frac{34.4064 MHz}{33.33 MHz} = \frac{45.1584 MHz}{f_{out\_adjusted}}
f_{out\_adjusted}=43.745625 MHz
Desired Frequency(MHz)に「43.745625」と入力すると、図6のような設定になります。
図6: 最終のPLL1の設定
次に、frefの実際の値を使用して、この構成で正しい出力が得られるようにします。
f_{out\_actual}=\frac{f_{ref\_actual}∗FEEDBACK\_DIV}{REFERENCE\_DIV∗OUTPUT\_DIV}=\frac{(34.4064 MHz)∗(84)}{(8)∗(8)}=45.1584 MHz
つまり、Actual Frequencyフィールドには43.745625MHzと表示されていますが、希望通り、実際には45.1584MHzになります。
最後に、クロックダイアグラムのCLK_HF1エレメントをクリックします。図7に示すように、Source Clockの値を「CLK_PATH2」に変更します。
図7: 最終のCLK_HF1の設定
File > Saveを選択すると、設定が保存され、ソースコードが生成されます。