在线时间613 小时
UID252169
注册时间2010-12-5
NXP金币0
TA的每日心情 | 开心 2019-2-14 16:49 |
---|
签到天数: 296 天 连续签到: 1 天 [LV.8]以坛为家I
金牌会员
 
- 积分
- 4473
- 最后登录
- 2020-4-14
|

楼主 |
发表于 2016-1-18 10:45:18
|
显示全部楼层
本帖最后由 zhjb1 于 2016-1-18 10:46 编辑
接着本文的讨论。
回到KL26实验发现问题多多:
在MKL_uart.c中的中断:
#if UART0_RECEIVE_IRQ
while (UART0_S1_REG(uartPtr) & UART0_S1_RDRF_MASK){//清除中断标志
uart0SendChar(UART0_D_REG(uartPtr));//返回接收数据
//while(!UART0_D_REG(uartPtr));//清接收缓冲区
}
#endif
如果打开第二行uart0SendChar(UART0_D_REG(uartPtr));
那么在采用:
//uart0 Get Charact UART获取一个字节
INT8U uart0GetChar(void){
UART0_MemMapPtr uartPtr = UART0_BASE_PTR;
while (!(UART0_S1_REG(uartPtr) & UART0_S1_RDRF_MASK));//等待接收缓冲区可用
return UART0_D_REG(uartPtr);//返回接收字节
}
获取字节的时候UART0将自动完成接收转发的工作——RX接收到自动就向TX发出,但如果关掉这一项,就发生不能转发的的现象。
问题是:我希望的是接收一组[个]字符串后,自动停止接受,处理数据之后向LCD写和向TX发出以便上位机接收显示,验证处理的正确与否。
尝试过用:
uart0TranControl(0,0);
NVIC_DisableIRQ(UART0_IRQn);
和
uart0TranControl(1,1);
NVIC_EnableIRQ(UART0_IRQn);
来禁止和打开UART工作和中断,结果不行,RX是在一直接收数据,直到好像是1.5K~1.7K之间的某个位置停止,感觉就像是系统溢出了停止,之后就不再继续下去了——因为在系统中设置了输出->PC和LCD两种方式验证结果,都是停止不在运行了。
而在其他M0的MCU中可以认为终止中断和开中断,以便控制程序走向,好像KL的函数不是那样的。
求解。
建议用缓冲区方式的请绕过。因为对正面操作的都过不去,还尝试后面的操作再回到前台? |
|