5个职位/ 0个新
最后发表
index219
离线
最后看到:1年7个月前
加入:2016-05-23 07:00
需求方工程中使用UART2发送数据时死机

问题描述:
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 ();
……

关键词:
设备:
Gongyu_Dialog
离线
最后看到:4天14小时前
加入:2016-04-27 07:07
不知道你的write_txbuf函数的内容

不知道你的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寄存器

index219
离线
最后看到:1年7个月前
加入:2016-05-23 07:00
write_txbuf函数是参考官方演示的外设历程来的

write_txbuf函数是参考官方演示的外设历程来的。我修改成你函数试试
空白write_txbuf (uint8_t txbuf)

//将字符写入UART2,然后同步等待完成。
tx_in_progress = 1;
uart2_write (&txbuf 1 uart_write_cb);
而(tx_in_progress)

index219
离线
最后看到:1年7个月前
加入:2016-05-23 07:00
回调函数将变量清零。

回调函数将变量清零。
uart_write_cb ()

tx_in_progress = 0;

我按照你提供的发数据函数,是可以运行的,请教下,我是用的官方演示历程的方式,引起死机的原因是什么?

Gongyu_Dialog
离线
最后看到:4天14小时前
加入:2016-04-27 07:07
因为原先的发送函数会调用到uart2_thr_empty

因为原先的发送函数会调用到uart2_thr_empty_isr。在里面会调用uart2_txfifo_full_getf来检查fifo是否满。如果满了,直接就不放进fifo了。
也就调用不到回调函数将标记清0。所以如果fifo里数据移走的速度小于你放数的速度,就会一直死循环了。