新手上路
- 积分
- 49
- 金钱
- 49
- 注册时间
- 2013-11-21
- 在线时间
- 1 小时
|
5金钱
请教大虾们,
小弟原来SPI 通信都是采用查询方式,想采用中断方式收发,
小弟使用SPI中断收发,在中断中接收数据显示为0xff,为什么?中断函数处理如下,请大虾们赐教
void SPI2_IRQHandler(void)
{
u8 value=0;
if(SPI_I2S_GetITStatus(SPI2,SPI_I2S_IT_TXE))
{
SPI_I2S_ClearFlag(SPI2,SPI_I2S_IT_TXE);
if(_Spi2CtrlBlock.WrCnt>0)
{
EnRdValidDataFlag=1;
SPI2->DR=_Spi2CtrlBlock.WriteBuffer[_Spi2CtrlBlock.WrOutIdx];
_Spi2CtrlBlock.WrOutIdx++;
_Spi2CtrlBlock.WrOutIdx %= SPI2_BUFFER_SIZE;
_Spi2CtrlBlock.WrCnt--;
}
else
{
SPI_I2S_ITConfig(SPI2,SPI_I2S_IT_TXE,DISABLE);
}
}
if(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_IT_RXNE))
{
SPI_I2S_ClearFlag(SPI2,SPI_I2S_IT_RXNE);
if ((_Spi2CtrlBlock.RdCnt>0) )
{
value=SPI2->DR;
_Spi2CtrlBlock.ReadBuffer[_Spi2CtrlBlock.RdInIdx]=value;
_Spi2CtrlBlock.RdInIdx++;
_Spi2CtrlBlock.RdInIdx %= SPI2_BUFFER_SIZE;
_Spi2CtrlBlock.RdCnt--;
if (_Spi2CtrlBlock.RdCnt==0)
{
EnRdValidDataFlag=0;
SPI_I2S_ITConfig(SPI2,SPI_I2S_IT_TXE,DISABLE);
if(_Spi2CtrlBlock.CallBackFuncPtr!=NULL)
{
_Spi2CtrlBlock.CallBackFuncPtr();
}
}
}
}
}
|
|