你好,
我触发一个中断唤醒DA14580。
我想知道的是什么时候准备好接收和发送UART信息。它是在回调函数的末尾还是在代码的更远处?
提前谢谢。
关键词:
设备:
你好,
我触发一个中断唤醒DA14580。
我想知道的是什么时候准备好接收和发送UART信息。它是在回调函数的末尾还是在代码的更远处?
提前谢谢。
嗨Avouaill,
当处于睡眠模式时,设备关闭XTAL16,这对UART的时钟生成至关重要,所以在醒来后,您将不得不等待XTAL16来解决。最安全的地方,确保XTAL16已经定居在app_on_ble_powered回调(因为核心还需要XTAL16为了经营),经过这个函数,只要你不睡觉设备将XTAL16结算,做好准备,你将能够通过UART接收数据。
由于MT_dialog
你好,
谢谢你的回答。
我实际上使用的是V.150.2版本,我找不到任何app_on_ble_powered函数。你知道在我使用的版本中是否有等价的。
谢谢提前
问候
嗨Avouaill,
在所有的SDK5版本中,回调被命名为app_on_ble_powered,甚至在SDK5.0.2.1中,这是第一个SDK5版本,我假设你使用的是SDK3。在这种情况下,没有可以附加源代码的回调函数,可以放置代码的相关钩子是app_asynch_trm()函数。但我强烈建议改用SDK 5。
由于MT_dialog
你好,
好的,我知道了。
我尝试做的是唤醒BLE模块从扩展睡眠模式和发送中断到uC警告时,UART准备好了。
是否有可能为我提供一个回调函数,它可以正确地唤醒BLE模块的所有必要的函数?我会在之后添加中断,以符合我的要求。
问候
你好,
几乎完成了,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准备就绪
}
我的函数中一定有什么我没发现的错误。
谢谢提前
嗨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
你好,
非常感谢你的帮助。
我将移动到最新的SDK,并设法使一切与您的提示工作。
主题可以关闭了。
问候
Aurelien