内容:
出现错误现象:
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))
{
}
}
请问,问题可能在哪?
l l3:
CC2538 System-on-Chip Solution for 2.4-GHz IEEE 802.15.4 and ZigBee®/ZigBee IP® ApplicationsTexas Instruments CC2538™ Family of ProductsVersion CUser's Guide
1、第418页,如果从机模式 TX FIFO缓冲区内的数据小于8字节 ,此时主机读取的数据会是8个0;这样就会出现数据移位的假象?
2、可不可以先填充 TX FIFO缓冲区数据,再使能SYS_CTRL_RCGCSSI。 读出数据会正确?
期待回复!
xinchan wang:
大神,您有空可以把这个发送字符串的程序给我发过来看看? 谢谢!