添加UART到DA1458x_SDK项目

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

嗨,对话框中,

现在我正在努力将UART2通信添加到DA1458x_SDK示例项目中的ble_app_all_in_one项目中。
UART2通信与uart2_async项目在相同的DA1458x_SDK样例项目工作良好。
但是通过将uart2_async函数添加到ble_app_all_in_one项目中,UART2通信不能正常工作。
作为UART2函数,我只是相同的uart2_async函数。
出现以下异常现象。

只需在调试器中运行,希腊语字符beta将出现在控制台中。

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

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

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

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

谢谢,

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

嗨,第欧根尼,

事实上,您正在使用BLE,设备将进入睡眠状态,因此16MHz晶体振荡器将断电,您将无法使用UART2。只有在XTAL16M打开时,UART2才工作。如果你想在使用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年6个月前
加入: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_finish_transfers()后uart2_read()和uart2_write()而不是while (uart2_read_in_progress){},然后UART2接收和UART2发送工作正常。
总之,由于RW内核的频繁系统中断,其他中断可能无法正常工作,更多的DA1485x性能很差。
关于uart2_async没有RW内核工作正常,但相同的函数不与RW内核工作,我得出结论。

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

谢谢,

PM_Dialog
离线
最后看到:1天10小时前
工作人员
加入: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