问题描述:
1 .在工程DA1458x_DSPS_v_5.150.2中,每隔1 s通过uart2打印数据0-21,结果死机,将打印数据改为0-20,可以循环打印。
请问是什么地方干扰了uart2的操作?还是需要特殊设置某些参数?
注active_1s()函数在官方演示外设工程uart2_async中是可以循环打印的。
空白active_1s(空白)
{
uint8_t我;
For (i = 0;i < 21; i++) {
write_txbuf(我);
}
而(1){
{做
//调度所有挂起的事件
schedule_while_ble_on ();
}
而((app_asynch_proc ()));//授予控制给应用程序,尝试去断电
……
active_1s ();
……
}
关键词:
设备:
不知道你的write_txbuf函数的内容,我这里用了这个函数来替代你的write_txbuf。
并且把
active_1s ();/ /放在USE_WDOG这个位置之前
如果(USE_WDOG)
wdg_reload (WATCHDOG_DEFAULT_PERIOD);
我这里打印是好的。
空白uart_send_byte (char ch)
{
而((GetWord16 (UART2_LSR_REG) &0x20) = = 0);//读取状态reg检查THR是否为空
SetWord16 (UART2_RBR_THR_DLL_REG (0 xff&ch));//写入THR寄存器
}
write_txbuf函数是参考官方演示的外设历程来的。我修改成你函数试试
空白write_txbuf (uint8_t txbuf)
{
//将字符写入UART2,然后同步等待完成。
tx_in_progress = 1;
uart2_write (&txbuf 1 uart_write_cb);
而(tx_in_progress)
;
}
回调函数将变量清零。
uart_write_cb ()
{
tx_in_progress = 0;
}
我按照你提供的发数据函数,是可以运行的,请教下,我是用的官方演示历程的方式,引起死机的原因是什么?
因为原先的发送函数会调用到uart2_thr_empty_isr。在里面会调用uart2_txfifo_full_getf来检查fifo是否满。如果满了,直接就不放进fifo了。
也就调用不到回调函数将标记清0。所以如果fifo里数据移走的速度小于你放数的速度,就会一直死循环了。