你好,
我触发了一个中断以唤醒DA14580。我想知道是什么时候准备好接收UART信息并发送它们。它会在回调函数的末尾还是进一步在代码上?提前致谢。
嗨Avouaill,
当在睡眠模式下,设备关闭XTAL16,这对UART的时钟产生至关重要,因此在醒来之后,您必须等待XTAL16才能定居。最安全的地方,以确保XTAL16已经解决的是App_On_ble_powered回调(因为核心也需要XTAL16以运行),经过该函数,只要您不睡觉,设备将使XTAL16结算准备好了,您将能够通过UART接收数据。
谢谢mt_dialog.
感谢您的回答。我实际上使用了V.150.2版本,我找不到任何app_on_ble_powered函数。您是否知道我使用的版本中有相同的。
提前致谢
问候
在所有SDK5版本中,回调名为App_On_ble_Powered,即使在SDK5.0.2.1中也是第一个SDK 5发行版,我想使用SDK3。在这种情况下,没有任何回调,您可以附上您的源代码和相关挂钩,您可以放置代码是app_asynch_trm()函数。但我强烈建议搬到SDK 5。
好,我知道了。我尝试做的是从扩展睡眠模式唤醒BLE模块,并在UART准备就绪时发送对UC的中断。是否有可能向我提供一个回调函数,可以正确地唤醒BLE模块所有必要的功能?我将增加中断以便之后与我的要求匹配。
几乎完成了,CallBcack函数称为正确调用,我在内部切换BLE_INT以在UC上生成中断。问题是,在完全3醒来之后,无缘无故,它不会再切换ble_int。以下是我的回调函数的代码:
void ext_wakeup_cb(void){if(fsleep == arch_ext_sleep_on){if(getBits16(sys_stat_reg,per_is_down)){
if(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(0x40,0x00,1,0);wkupct_register_callback(ext_wakeup_cb);gpio_setinactive(gpio_port_0,gpio_pin_7);//向UC发出警告UART已准备就绪}
在我的功能中,我没有看到的问题。
我不确定这是你正在寻找的,但为了强迫唤醒ble(没有待处理的活动,所以应用程序必须强迫ble唤醒)你必须调用Arch_ble_force_wakeUp();在这样做后,设备应该开始唤醒核心的过程,一旦核心唤醒了App_Asynch_trm()就会被执行。
关于您在稍后的帖子上提到的问题,我想你没有看到GPIO切换,因为你期望的,我不会在回调函数中看到任何地方来调用Periph_init()函数,以便初始化引脚,因此,如果设备切换引脚的时间也恰好发生设备和外围设备唤醒。一些评论也是,没有必要调用GPIO_Reservations(),它在系统初始化期间调用的功能,无需再次调用它。如果我可以使用ARCH_BLE_FORCE_WAKEUP()函数,请通过直接在寄存器上撰写寄存器,而不是通过arch_ble_force_wakeup()函数来实现BLE核心,如果我正确地记得SDK 3上有完全相同的APP_BLE_FORCE_WAKEUP()。还允许我再次提及您正在提出唤醒BLE核心的事实并不意味着核心立即唤醒,一旦设备进入我的App_Asynch_trm()即可醒来之前提到过。请检查SDK5中的BLE_APP_SLEEPMODE示例它可能有点不同的SDK,但唤醒序列遵循SDK的非常相似。我坚持最新的SDK。
非常感谢您的帮助。我将搬到最新的SDK并设法使一切都与您的提示合作。主题可以关闭。
Aurelien.
嗨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中也是第一个SDK 5发行版,我想使用SDK3。在这种情况下,没有任何回调,您可以附上您的源代码和相关挂钩,您可以放置代码是app_asynch_trm()函数。但我强烈建议搬到SDK 5。
谢谢mt_dialog.
你好,
好,我知道了。
我尝试做的是从扩展睡眠模式唤醒BLE模块,并在UART准备就绪时发送对UC的中断。
是否有可能向我提供一个回调函数,可以正确地唤醒BLE模块所有必要的功能?我将增加中断以便之后与我的要求匹配。
问候
你好,
几乎完成了,CallBcack函数称为正确调用,我在内部切换BLE_INT以在UC上生成中断。
问题是,在完全3醒来之后,无缘无故,它不会再切换ble_int。
以下是我的回调函数的代码:
void ext_wakeup_cb(void)
{
if(fsleep == arch_ext_sleep_on)
{
if(getBits16(sys_stat_reg,per_is_down))
{
if(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(0x40,0x00,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();在这样做后,设备应该开始唤醒核心的过程,一旦核心唤醒了App_Asynch_trm()就会被执行。
关于您在稍后的帖子上提到的问题,我想你没有看到GPIO切换,因为你期望的,我不会在回调函数中看到任何地方来调用Periph_init()函数,以便初始化引脚,因此,如果设备切换引脚的时间也恰好发生设备和外围设备唤醒。一些评论也是,没有必要调用GPIO_Reservations(),它在系统初始化期间调用的功能,无需再次调用它。如果我可以使用ARCH_BLE_FORCE_WAKEUP()函数,请通过直接在寄存器上撰写寄存器,而不是通过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.