系统模块如下所示:
问题是当 RM57L843的 SPI2和 SPI3同时从 RM42接收数据时、会丢失一个字节。
为了便于观察、 在 SPI2和 SPI3的启动和结束启动中更改了 GIO 引脚状态。
void vSpi2IrqHandle (void)
{
uint32 flags =(spiREG2->FLG & 0x0000FFFFU)&(~spiREG2->LVL & 0x035FU);
uint32 vec = spiREG2->intvecT0;
(*(volatile UINT32 *) 0xFFF7B854UL)&=~(1 <<0);//将 GPI PIN 设置为低电平
开关(VEC)
{
情况0x24U:/*接收缓冲区已满中断*/
{
SPI2_temp0 =(uint8) spiREG2->BUF;
my_printf ("1 %d\r\n"、SPI2_temp0);//通过 SCI 打印到 PC
if (SPI2_flg = 0)//以删除第一组数据
{
SPI2_flg = 1;
}
其他
{
if ((SPI2_LAST== 5)&&(SPI2_temp0 == 1)//主机数据按顺序。发送1 2 3 4 5
{
}
否则、if (((SPI2_temp0-SPI2_LAST=1)//确定字节是否丢失
{
}
其他
{
my_printf ("error2\r\n");
while (1);//如果丢失,则停止
}
}
SPI2_LAST = SPI2_temp0;
中断;
}
情况0x28U:/*发送缓冲器空中断*/
{
中断;
}
案例0x26U:/*data over Run*/
{
my_printf ("运行时的数据!\r\n");
中断;
}
默认值:/*清除标志并返回*/
spiREG2->FLG = 0xFFFF;
中断;
}
(*(volatile UINT32 *) 0xFFF7B854UL)|=(1 << 0);//将 Gio 引脚设置为高
电平}
void vSpi3IrqHandle (void)
{
uint32 flags =(spiREG3->FLG & 0x0000FFFFU)&(~spiREG3->LVL & 0x035FU);
uint32 vec = spiREG3->intvecT0;
(*(volatile UINT32 *) 0xFFF7B854UL)&=~(1 <<5);//将 Gio 引脚设置为低电平
开关(VEC)
{
情况0x24U:/*接收缓冲区已满中断*/
{
spi3_temp0 =(uint8) spiREG3->BUF;
my_printf ("2 %d\r\n"、spi3_temp0);
if (spi3_flg = 0)
{
spi3_flg = 1;
}
其他
{
if ((spi3_last = 5)&&(spi3_temp0 = 1))
{
}
否则、如果(((spi3_temp0-spi3_last)= 1)
{
}
其他
{
my_printf ("error3\r\n");
while (1);
}
}
spi3_last = spi3_temp0;
中断;
}
情况0x28U:/*发送缓冲器空中断*/
{
spiREG3->FLG &=(~(1<<9));
中断;
}
案例0x26U:/*data over Run*/
{
my_printf ("运行时的数据!\r\n");
spiREG3->FLG &=(~(1<<6));
中断;
}
默认值:/*清除标志并返回*/
spiREG3->FLG = 0xFFFF;
中断;
}
(*(volatile UINT32 *) 0xFFF7B854UL)|=(1 << 5);//将 Gio 引脚设置为高
电平}
示波器 波形:

串行数据:
如上面显示的代码所示, 通过观察示波器和串行数据,当数据丢失时,波形只能满足。
我尝试了很多方法,但仍然没有解决问题,
谁知道问题可能出在哪里?


