ボードは「基板付き体験編 ARM PSoCで作るMyスペシャル・マイコン」の付属基板を使った。
ブレッドボード図
PSoC Creator Top Design
PSoC Creator ピンアサイン
<main.c>
#include <project.h>
#define TX_DATA_SIZE (2u)
int main()
{
uint8 txBuffer[TX_DATA_SIZE];
CyGlobalIntEnable; /* Enable global interrupts. */
SPIM_Start();
for(;;)
{
uint16 i;
for (i = 0; i < 4096; i++) {
// Highバイト(0x30=OUTA/BUFなし/1x/シャットダウンなし)
txBuffer[0] = ((i >> 8) & 0x0f) | 0x30;
txBuffer[1] = i & 0x00ff;
Pin_LDAC_Write(1u);
SPIM_PutArray(txBuffer, TX_DATA_SIZE);
while (0u == (SPIM_ReadTxStatus() & SPIM_STS_SPI_DONE)) {
// wait
}
Pin_LDAC_Write(0u);
CyDelay(1u);
}
}
}
1usのサンプリング間隔でノコギリ波を出力させている。
出力波形
24MHz駆動、 SPI Data Rate 4MHz
まずは基本的なスペックで動作させてみた。
ch1:MOSI ch2:SCLK
ch1:CS ch2:SCLK
ch1:LDAC ch2:SCLK
LDACはプログラムで出力しているので、SPI通信の処理時間はコミコミで6.960us。
while (0u == (SPIM_ReadTxStatus() & SPIM_STS_SPI_DONE)) {と、SPI通信が完了するまでWaitしているが、この処理を取り除くと
//wait
}
ch1:LDAC ch2:SCLK
SPI通信が終わる前にLDACがLに落ちている。←これではダメなので待ち処理は必要だ。
60MHz駆動、 SPI Data Rate 20MHz
MCP4922は仕様では20MHzまで動作するのでSPI Clockを上げてみた。
PSoC 5LPのMaster Clockは以下のとおり設定。
ch1:MOSI ch2:SCLK
SCLKの周波数は、表示では「(2)15.03MHz」となっている。波形数えてみても5区間で波形8個なので
100ns * 5 / 8 = 62.5nsSPI Masterコンポーネントでは20MHzに設定しているので謎。
1 / 62.5ns = 16MHz
ch1:CS ch2:SCLK
ch1:LDAC ch2:SCLK
SPI通信にかかる時間を2.412us(だいたい414.6kHz)まで減らせた。
0 件のコメント:
コメントを投稿