DA14580唤醒后准备接收UART

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.wsdof.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
8个职位/ 0个新职位
最后发表
Avouaill
离线
最后看到:3年8个月前
加入:2016-09-19 15:21
DA14580唤醒后准备接收UART

你好,

我触发一个中断唤醒DA14580。
我想知道的是什么时候准备好接收和发送UART信息。它是在回调函数的末尾还是在代码的更远处?
提前谢谢。

设备:
MT_dialog
离线
最后看到:2个月2周以前
工作人员
加入:2015-06-08 34
嗨Avouaill,

嗨Avouaill,

当处于睡眠模式时,设备关闭XTAL16,这对UART的时钟生成至关重要,所以在醒来后,您将不得不等待XTAL16来解决。最安全的地方,确保XTAL16已经定居在app_on_ble_powered回调(因为核心还需要XTAL16为了经营),经过这个函数,只要你不睡觉设备将XTAL16结算,做好准备,你将能够通过UART接收数据。

由于MT_dialog

Avouaill
离线
最后看到:3年8个月前
加入:2016-09-19 15:21
你好,

你好,

谢谢你的回答。
我实际上使用的是V.150.2版本,我找不到任何app_on_ble_powered函数。你知道在我使用的版本中是否有等价的。

谢谢提前

问候

MT_dialog
离线
最后看到:2个月2周以前
工作人员
加入:2015-06-08 34
嗨Avouaill,

嗨Avouaill,

在所有的SDK5版本中,回调被命名为app_on_ble_powered,甚至在SDK5.0.2.1中,这是第一个SDK5版本,我假设你使用的是SDK3。在这种情况下,没有可以附加源代码的回调函数,可以放置代码的相关钩子是app_asynch_trm()函数。但我强烈建议改用SDK 5。

由于MT_dialog

Avouaill
离线
最后看到:3年8个月前
加入:2016-09-19 15:21
你好,

你好,

好的,我知道了。
我尝试做的是唤醒BLE模块从扩展睡眠模式和发送中断到uC警告时,UART准备好了。
是否有可能为我提供一个回调函数,它可以正确地唤醒BLE模块的所有必要的函数?我会在之后添加中断,以符合我的要求。

问候

Avouaill
离线
最后看到:3年8个月前
加入:2016-09-19 15:21
你好,

你好,

几乎完成了,callback函数被正确调用,我切换内部的BLE_int来生成uC上的中断。
问题是,在准确的3唤醒后,它没有理由不再切换BLE_int。
下面是我的回调函数的代码:

空白ext_wakeup_cb(空白)

if (fsleep == ARCH_EXT_SLEEP_ON) / /设置当前状态

如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))

如果(DEVELOPMENT_DEBUG) {
GPIO_reservations ();

SetBits32 (GP_CONTROL_REG BLE_WAKEUP_REQ 1);
fsleep = ARCH_SLEEP_OFF;

其他的
fsleep = ARCH_EXT_SLEEP_ON;

GPIO_SetActive (GPIO_PORT_0 GPIO_PIN_7);//向uC发送信号,警告UART准备就绪
wkupct_enable_irq (0 x40 0 x00 1,0);
wkupct_register_callback (ext_wakeup_cb);
GPIO_SetInactive (GPIO_PORT_0 GPIO_PIN_7);//向uC发送信号,警告UART准备就绪

我的函数中一定有什么我没发现的错误。

谢谢提前

MT_dialog
离线
最后看到:2个月2周以前
工作人员
加入:2015-06-08 34
嗨Avouaill,

嗨Avouaill,

我不确定这是不是你想要的,但是为了强制唤醒BLE(没有计划的挂起事件,所以应用程序将不得不强制唤醒BLE),你将不得不调用arch_ble_force_wakeup();在此之后,设备应该启动Core的唤醒过程,一旦Core唤醒,app_asynch_trm()将被执行。

关于你在后面的帖子中提到的问题,我想你没有看到GPIO切换如你所期望的那样,好吧,我在回调函数中没有看到调用periph_init()函数来初始化你的引脚,所以当设备在切换引脚的时候,设备和外围设备碰巧是醒着的。还有一些注释,没有必要调用GPIO_reservations(),这个函数在系统初始化期间被调用一次,没有必要再次调用它。你可以使用arch_ble_force_wakeup()函数,而不是通过直接写入寄存器来启用ble核心,如果我没记错的话,在SDK 3上有app_ble_force_wakeup(),它做了完全相同的事情。还允许我再次提到的事实,你正在请求唤醒BLE核心并不意味着核心立即醒来,核心将被唤醒一旦设备进入app_asynch_trm(),就像我之前提到的。请检查SDK5中的ble_app_sleepmode示例,它可能是一个有点不同的SDK,但唤醒顺序在SDK之间非常相似。我坚持使用最新的SDK。

由于MT_dialog

Avouaill
离线
最后看到:3年8个月前
加入:2016-09-19 15:21
你好,

你好,

非常感谢你的帮助。
我将移动到最新的SDK,并设法使一切与您的提示工作。
主题可以关闭了。

问候

Aurelien