将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_异步项目的通信工作正常。
但是在一个项目中,通过将uart2异步函数添加到ble_app_all_中,uart2通信无法正常工作。
作为UART2函数,我只使用相同的uart2_async函数。
出现以下异常现象。

只需通过调试器运行,希腊字母beta就会出现在控制台中。

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

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

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

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

谢谢,

设备:
PM_Dialog
离线
最后看到:1周2小时前
工作人员
加入: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端口/引脚分配给P04,将UART_RX端口/引脚分配给P05。请确保您所更改的配置位于HW_CONFIG_PRO_DK下,并且该配置由董事会在HW_CONFIG定义中声明。此外,您必须在正在工作的文件中包含arch_console.h文件。

谢谢,PM_Dialog

提奥奇尼斯
离线
最后看到:2年7个月前
加入:2018-10-04 05:09
你好,下午对话,

你好,下午对话,

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

//启动外设的电源域
SetBits16 (PMU_CTRL_REG PERIPH_SLEEP 0);
而(!(GetWord16(SYS_STAT_REG)&PER_是向上的));
设置16(CLK_16M_REG,XTAL16_BIAS_SH_ENABLE,1);

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

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

我有一个关于RW内核的问题,RTO的滴答声间隔是多少?
如果你知道,请告诉我,因为我也使用systick,所以我关心频率。

谢谢,

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

嗨,第欧根尼,

对不起,你的描述有点混乱。仅启动XTAL16通过UART获取正确数据是不够的,因为必须首先结算XTAL16M。确保XTAL16正确安置的最安全的地方是在app_on_ble_供电的回调中(因为内核也需要XTAL16运行),在完成该功能后,如果您不进入睡眠状态,设备将安置XTAL16并准备就绪,您将能够通过UART接收/传输数据。当设备处于睡眠模式时,它会关闭XTAL16,这对于UART的时钟生成至关重要,因此醒来后,您必须等待XTAL16再次稳定下来。在我之前的文章中,我建议您在使用BLE功能时使用UART最安全的方法。我想让您知道的另一个信息是,当设备处于睡眠模式时,它会关闭XTAL16,这对于UART的时钟生成至关重要,因此在醒来后,您必须等待XTAL16稳定下来。另外,请注意,DA1458x系列芯片有一个非常简单的事件驱动调度程序,它们不基于RTO。DA1468x系列设备基于RTOS。

谢谢,PM_Dialog