在线时间40 小时
UID3083991
注册时间2014-12-16
NXP金币0
该用户从未签到
中级会员
 
- 积分
- 240
- 最后登录
- 2016-10-20
|
本帖最后由 plabghhahacong1988 于 2015-1-22 20:48 编辑
详细情况如下:
设置SPI_B为主机,SPI_C为从机。
设置定时周期为20ms,使用RTI中断完成。
SPI的接收和发送都采用中断方式完成。
在RTI中断函数开启SPI发送中断,每20ms开一次中断,传一次数据。调用方式如下所示:
void IsrRti(void)
{
ResultPtr21++;
PIT.RTI.LDVAL.R=160000; /* 20ms */
PIT.RTI.TCTRL.B.TEN=1; /* 开始定时 */
PIT.RTI.TCTRL.B.TIE=1; /* 使能RTI中断 */
PIT.RTI.TFLG.B.TIF=1; /* 清RTI中断 */
Spi_TransmitByteDataToBuffer(SPI_C, SpiCTransmitData, 4);
Spi_TransmitByteDataToBuffer(SPI_B, SpiBTransmitData, 4);
Spi_ReceiveByteDataFromBuffer(SPI_C, SpiC_ReceiveData, 4);
Spi_ReceiveByteDataFromBuffer(SPI_B, SpiB_ReceiveData, 4);
sprintf(ttxx,"Number %d : Exit IsrRti.\n\n",ResultPtr21);
send_string(ttxx);
}
使用这种方式后,只能进195次中断,然后程序就飞到:
void EXCEP_DefaultExceptionHandler(void)
如果不使用RTI中断,直接在主函数中调用,使用方法如下:
int main(void)
{
for (;;)
{
ResultPtr21++;
Spi_TransmitByteDataToBuffer(SPI_C, SpiCTransmitData, 4);
Spi_TransmitByteDataToBuffer(SPI_B, SpiBTransmitData, 4);
Spi_ReceiveByteDataFromBuffer(SPI_C, SpiC_ReceiveData, 4);
Spi_ReceiveByteDataFromBuffer(SPI_B, SpiB_ReceiveData, 4);
sprintf(ttxx,"Number %d : Exit SPI.\n\n",ResultPtr21);
send_string(ttxx);
}
}
就不存在这个现象!
个人觉得:问题原因是RTI中断与SPI四个中断(SPI_B、SPI_C的接收和发送中断)之间有冲突。
我已经尝试了N种优先级不同的配置,均无解,因此特来求救大神们!
工程文件,如附件所示:
|
|