项目中,有两个中断,一个是串口接收中断,一个是定时器2中断
串口波特率为250K,数据传输采用1+8+2bit,即一个字节44us
串口接收硬件中断的优先级为:21
定时器2硬件中断的优先级为:23
1、代码运行后,出现丢数据现象,调试方式,屏蔽所有代码,只保留串口接收中断代码,与串口数据处理代码,居然正常,所以确定丢数据是软件不合理导致的。
2、逐渐开放其它代码,直接开启定时器2中断时,问题马上重现,所以丢数据是由于开启定时器2中断导致的。
那么为什么开启定时器2中断就会丢数据呢,难道是串口接收的中断优先级低于定时器2的中断优先级?
一查手册,发现串口接收中断的优先级并不低于定时器2的中断优先级。
后来猜测在默认的情况下,是不是处于,同时中断管理模式下呢?这种情况下是不允许发生中断嵌套的,所以在代码中手动添加以下代码:
disableInterrupts();
ITC->ISPR6 |= 0x0C;//将串口接收中断的软件优先级设置为最高级
ITC->ISPR6 &= 0x3F;//将TIM4定时中断的软件优先级设置为最低级
enableInterrupts();
编译,下载,进入仿真
Duang~
问题解决,不再出现串口接收溢出中断的问题了。也不丢数据了,哈哈哈哈哈……
|