ブレッドボード図
SCBモードと比べてMOSI(オレンジの線)だけがピンの位置が異なっている。
ピン接続表
PSoC Creator TopDesign
SPI Masterコンポーネントのclockに入力したクロック周波数の1/2がSPIのクロックになる。
PSoC Creatorのプロジェクト
https://github.com/ryood/PSoC_SPI_Master_Component_Test/tree/master/PSoC_SPI_Master_Test
出力波形
main.c: メインルーチン
int main()
{
CyGlobalIntEnable; /* Enable global interrupts. */
SPIM_Start();
uint16 i = 0;
for(;;)
{
DACSetVoltage16bit(i);
//DACSetVoltage(i);
i += 8;
if (i == 4096)
i = 0;
}
}
として、ノコギリ波を出力した。
SPI Master Component
input clock:48MHz(SPI clock: 24MHz)
(2)F: 564.2Hz
MCP4922はMax:20MHzなので仕様外だが、動作した。
SPI Master Component
input clock:24MHz(SPI clock: 12MHz)
(2)F: 431.7Hz
SCB Component
SPI clock: 8MHz(最大)
(2)F: 349.4Hz
タイミング制御なしで連続して出力しているので周波数が高い方が処理速度が速い。
SPI信号
SPI Master Component
input clock:48MHz(SPI clock: 24MHz)
ch1: LDAC ch2: SCLK
(1)T: 3.460us
ch1のHの時間は500ns * 4.5div = 2.25us
「T:」は波形の周期
SPI Master Component
input clock:24MHz(SPI clock: 12MHz)
(1)T: 4.530us
ch1のHの時間は500ns * 6.5div = 3.25us
SCB Component
SPI clock: 8MHz(最大)
(1)T: 4.940us
ch1のHの時間は500ns * 7.4div = 3.7us
ch2はSPIのSCLKだが、間欠的なので「(2)F:」は正確な周波数が表示されていないと思う。
SPIのデータ送信の前後でLDAC(ラッチ)をH/Lしているのでこの間隔がSPI通信の実行時間になる。
SPI Masterコンポーネントの24MHzはMCP4922の方の仕様外なので、12MHzを使うとしても、SCBコンポーネントの8MHzより速い。
サンプリング区間との比較
サンプリング周波数を48,000Hzにすると1 / 48,000Hz = だいたい20.83us
20.83us - 3.25us = 17.58usなので、このスキマ時間で波形生成の演算+αをやらないといけないようだ。
前回「PSoC 4 Pioneer Kitでリズムマシンのプログラムの処理時間を計測」で一番早い結果を見ると、「Releseモードでコンパイル」で0.332sだったので
0.332s / 48,000 = だいたい6.7usなのでなんとかいけるかな?
メモ:
- 足りなかたらサンプリング周波数を32,000Hzに落とす。あるいは仕様を無視してSPIのSCLKを24MHzでやる。
- SPI MasterコンポーネントはMOSI、MISOをまとめて3Wireでやるモードもあるので配線の具合では試してみる。
- PSoC 4にはDMAがない。なのでSPI MasterのExampleプロジェクトはやれなかった。DMAが使えればもうちょっとCPU時間を節約できるかも?やっぱそろそろPSoC 5LPも使っていこうか
0 件のコメント:
コメントを投稿