在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);
- }
- }
|