打印
[技术问题解答]

KL25Z使用MBed串口发送中断的问题

[复制链接]
579|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Luis德华|  楼主 | 2015-8-7 08:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在Mbed中,使用串口发送中断时,Freescale的MCU与其它MCU有些不同,串口发送中断不能总是开着,这样程序会不断进入中断服务程序,从而陷入死循环,不能正常运行。
例如,这样的用法程序是无法执行的,LED也不会闪(但是这个程序在ST的MCU上是可以正常运行的):
    #include "mbed.h"

    DigitalOut myled(LED1);
    Serial uart(USBTX, USBRX);

    void TXD_isr()
    {
        myled = !myled;
    }

    int main()
    {
        uart.attach(&TXD_isr, Serial::TxIrq);
        while(1) {
            uart.putc('>');
            wait(1.0);
        }
    }

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

    DigitalOut myled(LED1);
    Serial uart(USBTX, USBRX);

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

    int main()
    {
        while(1) {
            uart.putc('>');
            uart.attach(&TXD_isr, Serial::TxIrq);
            wait(1.0);
        }
    }



相关帖子

沙发
FSL_TICS_Jeremy| | 2015-8-7 09:23 | 只看该作者
楼主,你需要在中断函数中,清除中断标志,才可以避免一致进入中断函数

使用特权

评论回复
板凳
大苏牙| | 2015-8-7 10:58 | 只看该作者
进入中断先关中断,完成中断任务前再开中断

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

370

帖子

4

粉丝