从机SPI2发送中断某个字节重发

2019-08-14 02:47发布

      我的M3用SPI2作为从机,有1个IO下降沿去告知主机我要发数据了,这时主机会给予从机时钟,然后我在SPI2发送中断里面就不断写进SPI2要发的数据。
过程是这样的:
  • 事先将要发送的数据填进发送缓冲区SPI_Send_Buf [ ];
  • 先发送一个字节等主机时钟到:SPI_I2S_SendData(SPI2,SPI_Send_Buf[SPI_Send_Count]); SPI_Send_Count+=1;
  • M3的IO做一个下降沿告知主机,我要发送数据了。
  • 在SPI发送中断里面
  • if( SPI_I2S_GetITStatus( SPI2, SPI_I2S_IT_TXE ) == SET )//????
  •         {
  • //                dat=SPI_I2S_ReceiveData(SPI2);
  •                 SPI_I2S_ClearFlag(SPI2, SPI_I2S_FLAG_TXE);//清除断标志
  •                 SPI_I2S_SendData(SPI2,SPI_Send_Buf[SPI_Send_Count++]);//继续把下个字节写进MOSI
  •                 SPI_Send_Count%=350;
  •                 if(SPI_Send_Count>300 )//   300个字节发送完毕
  •                 {
  •                         SPI2_SendTime=0;
  •                         SPI_Send_Flag=0;
  •                         SPI_Send_Count=0; SPI2_Send_len=0;
  •                         cnt[0]=0x45;
  •            }
  •         }

现在有个严重现象是在我发300字节里面(其实有用的数据是前面的20字节左右,后面的补0),在前20个字节里面会出现某个字节重发1遍,比如我发:86 85 9B 4b 00 00 0C 00 FC FE FF FF 80 02 03 0E 02 00 01 01但是他会把0E连续发两遍,有时候又可能是80连续发两遍。
发送过程中可能会发送1毫秒的定时器中断与,SPI1接收中断,开始怀疑是定时器中断打断SPI2发送中断,导致SPI2某个字节发两遍,但是现在已经把SPI2发送中断改为最高,抢占、响应优先级都是0.(分组是2)
    还有一个不明白的是我将在SPI2中断不停将数据写进MOSI,300字节,SPI2发送中断什么时候才会停止呢?主机没有时钟SPI2发送中断就会停止?
0条回答

一周热门 更多>