为什么串口接收中断会反复被触发执行

2019-03-24 15:32发布

void UART1_ISR(void)
{
    unsigned long ulStatus;
    ulStatus=UARTIntStatus(UART1_BASE,true);     //   读取当前中断状态
    UARTIntClear(UART1_BASE,ulStatus);//   清除中断状态

   
    GPIOPinWrite(LED_PORT,LED_PIN, 0XFF);
    SysCtlDelay(1000 * (TheSysClock / 3000));
    GPIOPinWrite(LED_PORT,LED_PIN, 0X00);
    SysCtlDelay(1000 * (TheSysClock / 3000));
   
   

   
  
}
   
//  主函数(程序入口)
int main(void)
{
    clockInit();                                      //  时钟初始化:晶振,6MHz
    SysCtlPeriEnable(LED_PERIPH);                           //  使能LED所在的GPIO端口
    GPIOPinTypeOut(LED_PORT, LED_PIN);                      //  设置LED所在管脚为输出
    uartInit();                                             //  UART初始化
   
    for(;;);
}

我开了串口接收终端和接收超时中断  然后用串口调试助手给M3只发送了一次数据  只有一个字节 然而上面程序运行结果却是中断处理函数被反复触发执行呢 就像进入死循环一样  我只发了一次数据 而且只有一个字节 并且中断触发后也有清中断语句  所以不理解  请高手指点 小弟不胜感激 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
David_Lee
1楼-- · 2019-03-24 22:03
 精彩回答 2  元偷偷看……
luhezhangjian
2楼-- · 2019-03-25 00:12
< :TI_MSP430_内容页_SA7 --> 我试过了 没用的  还是反复执行
shilaike
3楼-- · 2019-03-25 00:19

LZ把你的UART配置函数拉上来看看,从Main和uart中断函数看是没有大的问题了。可能是配置上面有一些问题。。。。。。

或者是LZ在使用串口调试工具的时候,执行的不是发送一次,有些工具有连续发送这个选项的,望LZ再检查一下。或者建议直接使用超级终端或者Putty这个小软件。。。

[ 本帖最后由 shilaike 于 2011-10-18 16:26 编辑 ]
luhezhangjian
4楼-- · 2019-03-25 04:52
 精彩回答 2  元偷偷看……
brucege888
5楼-- · 2019-03-25 06:58
M3收到的数据没有及时读出啊,一直存在FIFO里面了。。。
Study_Stellaris
6楼-- · 2019-03-25 08:30
嗯,应该是这个原因,在接收中断里边,没有将 FIFO 里的数据读走,次数多了就会造成 FIFO 溢出,而溢出中断又没有开启,实际上后续的数据就丢了。

一周热门 更多>

相关问题

    相关文章