您好,我修改M031的Sample code : SPI_SlaveFIFOMODE,內容如下:
void SPI_Init(void)
{
SPI_Open(SPI0, SPI_SLAVE, SPI_MODE_0, 32,(uint32_t) NULL);
SPI_EnableInt(SPI0, SPI_UNIT_INT_MASK);
NVIC_EnableIRQ(SPI0_IRQn);
}
uint32_t SPI_RX_DATA[2];
uint8_t SPI_RX_DATA_CNT = 0;
uint8_t i=0;
void SPI0_IRQHandler(void)
{
if( SPI_GetIntFlag(SPI0, SPI_UNIT_INT_MASK))
{
SPI_ClearIntFlag(SPI0, SPI_UNIT_INT_MASK);
SPI_RX_DATA[SPI_RX_DATA_CNT] = SPI_READ_RX(SPI0);
SPI_RX_DATA_CNT++;
if( SPI_RX_DATA_CNT == 2 )
{
if( SPI_RX_DATA[0] == 0xB0000000 && SPI_RX_DATA[1] == 0x4FFFFFFF )
{
for(i=0;i<8;i++)
{
SPI_WRITE_TX(SPI0, 0x12345600); /* Write to TX FIFO */
//while(!SPI_GetStatus(SPI0, SPI_TX_EMPTY_MASK));
}
}
SPI_RX_DATA_CNT = 0;
}
}
}
MASTER與SLAVE之間的溝通為:
MASTER送出 ( 0xB0000000, 0x4FFFFFFF ) 後,將從SLAVE接收8筆32位元的資料
從示波器上觀察,CS、CLK、MOSI動作皆正常,
MASTER第一次發送命令時,CLK最後面的八筆資料MISO並無動作。
MASTER第二次發送命令時,CLK最後面的三筆資料MISO並無動作,也就是說MASTER從SLAVE接收到前5筆正確的資料。
MASTER第三次發送命令時,等同第一次的狀況。
MASTER第四次發送命令時,等同第二次的狀況。
以此類推
|