在线时间776 小时
UID126526
注册时间2008-5-19
NXP金币0
TA的每日心情 | 奋斗 2023-9-17 19:57 |
---|
签到天数: 2310 天 [LV.Master]伴坛终老
金牌会员
- 积分
- 10481
- 最后登录
- 2023-9-17
|
本帖最后由 shaoziyang 于 2015-4-23 23:29 编辑
在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);
- }
- }
复制代码
|
|