在线时间10 小时
UID3483385
注册时间2018-6-10
NXP金币0
TA的每日心情 | 开心 2019-1-10 11:07 |
---|
签到天数: 8 天 [LV.3]偶尔看看II
注册会员
- 积分
- 55
- 最后登录
- 2019-1-11
|
楼主 |
发表于 2018-8-7 09:07:50
|
显示全部楼层
楼主你好:
KL25 UART0接收不到数据的原因找到了,是因为OR标志位置位,RXD引脚接收到的数据直接丢失。然后就是从MCU应用程序跳入BootLoader时没有关闭UART0接收中断及RXD引脚功能,导致UART0的接收引脚还有数据接收,但这时读取不了,然后串口就接收溢出了。解决方法:
(1)跳入BootLoader前关闭UART0中断及引脚功能
void SOFTWARE_UPGRADE_HANDLER(uint8 data_len, uint8 data[])
{
g_UpgradeSoftFlag = TRUE;
Uart0Deinitialization();
Uart0PinConf(FALSE);
SCB_VTOR = RELOCATED_VECTORS;
JmpToBootLoader(*((unsigned long*)RELOCATED_VECTORS), *((unsigned long*) (RELOCATED_VECTORS+4)));
}
}
(2)在BootLoader的UART0开始接收时检测测置位OR标志(置位一次不行,需要循环检测置位)
while(upgrade == 0)
{
if(UART_IsChar())
{
getch = UART_GetChar();
if(CheckRstCmd(getch) == 0)
{
timeout_cnt= 0;
IsUpgrade = 1;
enableBootMode = WAIT_FOR_M4_COMMAND_STATE;
SendMsgByProtocol(BOOT_CMD_ACK,0,NULL,0);
break;
}
else
{
continue;
}
}
else if(UART_S1_REG(BOOT_UART_BASE) & UART_S1_OR_MASK) // clear OR bit
{
UART_S1_REG(BOOT_UART_BASE) |= UART_S1_OR_MASK;
}
}
|
|