[技术问题解答] KL25Z使用MBed串口发送中断的问题

[复制链接]
 楼主| Luis德华 发表于 2015-8-7 08:57 | 显示全部楼层 |阅读模式
在Mbed中,使用串口发送中断时,Freescale的MCU与其它MCU有些不同,串口发送中断不能总是开着,这样程序会不断进入中断服务程序,从而陷入死循环,不能正常运行。
例如,这样的用法程序是无法执行的,LED也不会闪(但是这个程序在ST的MCU上是可以正常运行的):
  1.     #include "mbed.h"

  2.     DigitalOut myled(LED1);
  3.     Serial uart(USBTX, USBRX);

  4.     void TXD_isr()
  5.     {
  6.         myled = !myled;
  7.     }

  8.     int main()
  9.     {
  10.         uart.attach(&TXD_isr, Serial::TxIrq);
  11.         while(1) {
  12.             uart.putc('>');
  13.             wait(1.0);
  14.         }
  15.     }

正确的用法如下,串口每秒发送一个字节,同时LED也会闪一次:
  1.     #include "mbed.h"

  2.     DigitalOut myled(LED1);
  3.     Serial uart(USBTX, USBRX);

  4.     void TXD_isr()
  5.     {
  6.         uart.attach(0, Serial::TxIrq);   // disable txd isr
  7.         myled = !myled;
  8.     }

  9.     int main()
  10.     {
  11.         while(1) {
  12.             uart.putc('>');
  13.             uart.attach(&TXD_isr, Serial::TxIrq);
  14.             wait(1.0);
  15.         }
  16.     }



FSL_TICS_Jeremy 发表于 2015-8-7 09:23 | 显示全部楼层
楼主,你需要在中断函数中,清除中断标志,才可以避免一致进入中断函数
大苏牙 发表于 2015-8-7 10:58 | 显示全部楼层
进入中断先关中断,完成中断任务前再开中断
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

370

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部

40

主题

370

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部