TI各位好:
昨天使用SSIDataGet接收资料时,遇到一个问题。我无法接收第9笔资料,使用示波器观看波形,有显示第九笔波形出来。
Data Sheet内说Rx_FIFO大小是8*16,可能是这个原因造成我无法接收到第九笔资料,想询问解决方式。
程式如下:
for(SSI_j = 0; SSI_j<Data_RX; SSI_j++)
{
SSIDataGet(SSI0_BASE, &Data[SSI_j]);
}
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
TI各位好:
昨天使用SSIDataGet接收资料时,遇到一个问题。我无法接收第9笔资料,使用示波器观看波形,有显示第九笔波形出来。
Data Sheet内说Rx_FIFO大小是8*16,可能是这个原因造成我无法接收到第九笔资料,想询问解决方式。
程式如下:
for(SSI_j = 0; SSI_j<Data_RX; SSI_j++)
{
SSIDataGet(SSI0_BASE, &Data[SSI_j]);
}
我无法接收第9笔资料,使用示波器观看波形,有显示第九笔波形出来。
您是否有进行在线debug?通过设置断点等方式来查看代码的运行情况
另外是否有检查FIFO内的数据是否被拿走(即FIFO是否是空的)?
观看程式运形状况都会卡在第九笔,后来更改为SSIDataGetNonBlocking程式不会卡,但是第九笔资料还是读不到。
至于是否有检查FIFO内的数据是否被拿走(即FIFO是否是空的)?
这部份还不太熟悉,要如何检查和清空FIFO,是否有范例可看?
我有尝试使用中断,但是结果还是无法读取到第九笔资料
SSIIntEnable(SSI0_BASE,SSI_RXFF|SSI_RXTO);
Void SSI0_Interrupt(void)
{
uint32_t ui32Status;
ui32Status = SSIIntStatus(SSI0_BASE, true);
for(SSI0_j= 0; SSI0_j< NUM_SSI_DATA; SSI0_j++)
{
SSIDataGet(SSI0_BASE, &pui32DataRx[SSI0_j]);
pui32DataRx[SSI0_j] &= 0x00FF;
}
SSIIntClear(SSI0_BASE, ui32Status);
}
建议您参考下面链接的写法:
https://blog.csdn.net/Attack_on_cc/article/details/87926159
void vSPI_Transmit(uint8_t *ucp_Data, uint16_t us_Size);
和void vSPI_Receive(uint8_t *ucp_Data, uint16_t us_Size);
函数是对上面的读写函数的一个封装实现了连续读以及连续写。