内容:
出现错误现象:
A.
主机发字符串 "Good morning, I am master.\0",
从机接收正常
B.
从机发字符串 "Hello,world!This is slave.\0",
主机接收: "is slave.\0Hello,world!This"
结果:
从机接收的正常,主机接收的出现错位
C.
C.1
主机配置:
SSIConfigSetExpClk(SSI0_BASE, SysCtrlIOClockGet(), SSI_FRF_MOTO_MODE_1,SSI_MODE_MASTER, 9600UL, 8);
从机配置:
SSIConfigSetExpClk(SSI0_BASE, SysCtrlIOClockGet(), SSI_FRF_MOTO_MODE_1, SSI_MODE_SLAVE, 9600UL, 8);
C.2
从机用udma方式接收,在从机udma接收中断中,在中断处理函数中,清除中断标志位后,调用如下函数:
void slave_tx(void)
{
uint32_t ui32Index;
uint8_t array[] ="hello,world!this is slave.";
// 拉低引脚PD5
GPIOPinWrite(HAL_SPI_SRDY_BASE, HAL_SPI_SRDY_PIN, 0);
for(ui32Index = 0; ui32Index < 26 ; ui32Index++)
{
SSIDataPut(SSI0_BASE, array[ui32Index]);
}
while(SSIBusy(SSI0_BASE))
{
}
// 拉高 PD5
GPIOPinWrite(HAL_SPI_SRDY_BASE, HAL_SPI_SRDY_PIN, HAL_SPI_SRDY_PIN);
}
C.3
主机检测到 PD5引脚出现下降沿 产生中断,在中断处理函数中,清除中断标志位后,调用如下函数:
static uint32_t pui32DataRx[26];
void master_tx_and_rx(void)
{
uint32_t ui32Index;
for(ui32Index = 0; ui32Index < 26; ui32Index++)
{
SSIDataPut(SSI0_BASE, 0x00);
SSIDataGetNonBlocking(SSI0_BASE, &pui32DataRx[ui32Index]);
pui32DataRx[ui32Index] &= 0x00FF;
}
while(SSIBusy(SSI0_BASE))
{
}
}
请问,问题可能在哪?