[求助] 采用stm8s的spi发送中断里接收数据,数据接收不对,求原因

piaoxian   2011-7-27 14:27 楼主

在用stm8s的spi发送中断方式来与flash存储器配合读写数据,在接收数据时,第一个接收到的字节总是莫名为0xff?有时候还会漏收字节?请大家指正是哪里有问题?

spi的发送中断里,完成发送和接收数据的处理:

@far @interrupt void SPI_IRQHandler(void)
{    
    if (SPI->SR & SPI_FLAG_RXNE)

  {
      if(SPI_pointer_Tx > SPI_Order_Len)
     {
       tempbuffer_rx[SPI_pointer_Rx++] = (u8)SPI->DR;
       //while(SPI_GetFlagStatus(SPI_FLAG_RXNE) == RESET); 
     }
  }
    if (SPI->SR & SPI_FLAG_TXE)
  {
     if (SPI_pointer_Tx < SPI_TDLen)
     {
            SPI->DR = tempbuffer[SPI_pointer_Tx++];
           if(SPI_pointer_Tx==SPI_TDLen)
           {
              GPIO_WriteHigh(GPIOG, GPIO_PIN_0);//置高CS           }     
        }
    else
    {

           SPI_ITConfig(SPI_IT_TXE, DISABLE);//缓冲区数据发送完成后,关闭中断,再次发送时打开      
     }
  } 
}

 

其中这句if (SPI->SR & SPI_FLAG_RXNE) 有的话,就会出现漏收,如果去掉的话就会漏收的字节出现了,但是会重复收到2次。

 

 

初始化程序如下:

 

void SPI_Initial(void)
{     
  
  /*push pull output for CLK, MOSI, pull up input for MISO */
 GPIO_Init  (GPIOC, GPIO_PIN_6 | GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_SLOW);   
 GPIO_Init  (GPIOC, GPIO_PIN_7, GPIO_MODE_IN_PU_IT );//FL不进SPI中断
 GPIO_Init  (GPIOG, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_SLOW );
 GPIO_Init  (GPIOG, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_SLOW );
  /* SPI config */
  SPI_DeInit();
 /* Initialize SPI in Slave mode  */
  SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_16, SPI_MODE_MASTER, SPI_CLOCKPOLARITY_HIGH,SPI_CLOCKPHASE_2EDGE, SPI_DATADIRECTION_2LINES_FULLDUPLEX, SPI_NSS_SOFT,(u8)0);//为1edge,flash不回。

 SPI_Cmd(ENABLE);   
  
}

应用时:

比如我向flash里写如16个数据:

0x05 0x06 0x07 0x08 ........0x14 0x015

但是读回来的数据就是:

0xff 0x06 0x07 0x07b 0x08 x09 .................0x12 0x13 

从读回来的数据里就可以看出,第一个字节多了一个0xff,但是却没有读到0x05,然后0x07读了2遍(if (SPI->SR & SPI_FLAG_RXNE) 有的话)。

 

其他命令时SPI也是表现多一个0xff,没分析出来是怎么回事?

 

看到spi的数据寄存器只有一个SPI_DR,是不是这个原因导致收的不及时?另外在通信时,我一直在用示波器监测数据,从示波器波形看,flash回的数据的波形正确,时序也是对的,看来就是芯片在接收时出现的问题,请大家帮助分析分析,到底是怎么回事?

挺着急的,肯请大家来分析!!指正!!!

 

 

 

回复评论 (4)

难道没有人建议点什么吗?我又试了试,还是不行?各位大侠们请来看看呀!!!!斑竹请帮帮忙吧!!!
点赞  2011-7-27 16:39
过了一个晚上了,还是没有人帮助分析分析!?再次肯请大家来一起分析分析!!!斑竹也过来帮助看看吧!?
点赞  2011-7-28 08:57
我自己结贴吧,换了一种方式,采用查询式的了,然后经过一系列的调试,终于ok。
点赞  2011-7-29 14:26
楼主,我也遇到与你相同的问题,主机我用的查询方式进行发送与接收,从机用中断进行接收与发送,请问你是怎么解决的?
点赞  2014-7-29 17:00
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复