将UART添加到DA1458x_SDK项目

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
4个职位/ 0个新职位
最后发表
第欧根尼
离线
最后看到:2年7个月前
加入:2018-10-04 05:09
将UART添加到DA1458x_SDK项目

嗨,对话框中,

现在,我正在努力将UART2通信添加到DA1458x_SDK示例项目中的ble_app_all_in_one项目中。
在同一个DA1458x_SDK示例项目中,UART2与uart2_async项目通信工作正常。
但是通过将uart2_async函数添加到ble_app_all_in_one项目中,UART2通信就不能正常工作了。
作为UART2函数,我只使用相同的uart2_async函数。
后续出现异常现象。

通过调试器运行,在控制台出现希腊语的字符测试版。

执行uart2_print_string()后,换行永远不会完成。

接收中断不会发生,尽管我通过调试器检查了UART2_Handler()。

我猜BLE内核干扰了我的UART2通信或者其他UART任务正在运行。
但是我感觉很奇怪,因为我在system_init()中插入了BLE设置。
当然,我冻结了watchdog并注释掉了GPIO_init(),但我只写了必要的IO配置。
由于我遇到了这些奇怪的现象,我注释掉了所有与UART相关的定义和函数,但结果是一样的。

有人能解决这样的问题吗?
或者有什么建议吗?

谢谢,

设备:
PM_Dialog
离线
最后看到:1周4小时前
工作人员
加入:2018-02-08 11:03
嗨,第欧根尼,

嗨,第欧根尼,

事实上,当您使用BLE时,设备将进入睡眠状态,因此16MHz晶体振荡器将关闭电源,您将无法使用UART2。UART2只在XTAL16M开启时工作。如果你想在使用BLE功能的同时打印数据,你应该使用在arch_console.h头文件中定义的arch_printf() API。这个API[将格式化的输出数据插入到UART队列中。在使用串行输出之前,用户应该通过在da1458x_config_basic.h中定义CFG_PRINTF标志来启用API。如果使用Pro DK,需要修改fw的uart端口,将UART_TX端口/pin配置为P04,将UART_RX端口/pin配置为P05。请确保您更改的配置在HW_CONFIG_PRO_DK下,并且该单板在HW_CONFIG定义中声明。另外,您必须在正在工作的文件中包含arch_console.h文件。

谢谢,PM_Dialog

第欧根尼
离线
最后看到:2年7个月前
加入:2018-10-04 05:09
嗨PM_Dialog,

嗨PM_Dialog,

谢谢你的建议,
我可能需要更详细的解释。
首先,对于启动16M XTAL并进入睡眠,UART在初始化之后立即启动,如下图所示,此时未启动睡眠。

//启动外设的电源域
SetBits16 (PMU_CTRL_REG PERIPH_SLEEP 0);
while (!(GetWord16(SYS_STAT_REG) & PER_IS_UP));
SetBits16 (CLK_16M_REG XTAL16_BIAS_SH_ENABLE 1);

当然,我在启动UART之前插入了arch_disable_sleep()和wdg_freeze()。
我昨天测试时,至少UART正在运行,但问题是部分显示了打印字符串,并且没有设置接收中断标志。

结果我解决了这个问题,并且我理解了原因是源自内核行为。
我在uart2_read()和uart2_write()之后插入uart2_finish_transfers(),而不是while (uart2_read_in_progress){},然后UART2 receive和UART2 send工作正常。
总之,由于RW内核的频繁系统中断,其他中断可能无法正常工作,更多的DA1485x具有非常差的性能。
关于没有RW内核的uart2_async工作正常,但相同的函数在RW内核中不工作,我总结了它。

我有一个关于RW内核的问题,RTOS的滴答时间间隔是怎样的?
如果你知道它,告诉我,因为我也使用系统,所以我关心频率。

谢谢,

PM_Dialog
离线
最后看到:1周4小时前
工作人员
加入:2018-02-08 11:03
嗨,第欧根尼,

嗨,第欧根尼,

抱歉,我不太明白你的描述。启动XTAL16以通过UART获得正确的数据是不够的,因为必须首先解决XTAL16M。最安全的地方,确保XTAL16了正确的app_on_ble_powered回调(因为核心还需要XTAL16经营),经过这个函数如果你不睡觉设备将XTAL16定居,和你将能够收到/通过UART传输数据。当设备处于睡眠模式时,它会关闭XTAL16,这对UART的时钟生成至关重要,所以在醒来后,你将不得不等待XTAL16再次设置。在我之前的文章中,我建议您在使用BLE功能时使用UART的最安全方式。我想让你知道的另一个信息是,当设备处于睡眠模式时,它会关闭XTAL16,这对UART的时钟生成至关重要,所以在醒来后,你将不得不等待XTAL16来解决。另外,请注意DA1458x系列芯片有一个非常简单的事件驱动调度程序,并且它们不是基于RTOS的。DA1468x系列设备是基于实时操作系统的。

谢谢,PM_Dialog