开发的基本设计工具包
DA14580(Murata模块在定制板上)
SDK 5.0.4
你好,对话框,
我之前使用SDK 5.0.3并调用了扩展睡眠和唤醒函数,没有出现问题。现在我有一个新的设计,我使用SDK 5.0.4。由于某些原因,醒来后的人的功能似乎不太一样。当设置唤醒引脚激活时,我没有得到唤醒。我尝试遵循ble_app_sleepmode示例,这似乎与我之前在SDK 5.0.3中所做的几乎相同。他们添加了app_easy_wakeup_set(app_wakeup_cb);我之前没用过的台词。我包括了这个和回调,这看起来像是重新启动广告。我想知道如果我应该只有一个回调和重新开始广告那里,但我试了,它也没有工作。
有什么配置参数需要我检查吗?之前我必须使用#define WKUP_ENABLE,但是这个例子似乎不需要这样做。
我有app_default_sleep_mode = ARCH_EXT_SLEEP_ON和#define CFG_MEM_MAP_EXT_SLEEP设置。
在我正在做的广告完整例程中调用sleep:
app_easy_wakeup_set(app_l0_wakeup_cb);
wkupct_register_callback(app_l0_wakeup_cb);
wkupct_enable_irq(WKUPCT_PIN_SELECT(GPIO_PORT_0, GPIO_PIN_7), // select DIALOG_WAKEUP pin P0_7
wkupct_pin_极性(GPIO_PORT_0, GPIO_PIN_7, WKUPCT_PIN_POLARITY_HIGH), //极性高
1, // 1事件
0);//调试时间= 0
ARCH_BLE_EXT_WAKEUP_ON();//转到睡眠悬挂唤醒引脚输入
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我没有看到广告重启当我切换P0_7引脚,所以我不确定我曾经得到wakeup_register_callback,但这里我有:
静态void app_l0_wakeup_cb(void)
{
if(getBits16(sys_stat_reg,per_is_down))
{
periph_init();
}
if(arch_ble_ext_wakeup_get()))
{
arch_set_sleep_mode (app_default_sleep_mode);
ARCH_BLE_FORCE_WAKEUP();
arch_ble_ext_wakeup_off ();
app_easy_wakeup();
//启动30秒的计时器
//如果在30秒内没有连接将返回睡眠
Sleep_timer = app_easy_timer(3000, sleep_timer_cb_handler);//设置为30秒
/ /重新启动广告
user_app_adv_start ();
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
如果您看到此内容,请告诉我。
谢谢你,马克斯
嗨Max44,
我不该看到的东西是错误的,您已经实现的代码,代码看起来与ble_app_sleepmode相同,因此它应该工作,我可以看到,大多数可能出错的条件与arch_ble_ext_wakeup_get检查(),如果函数返回0然后将执行在这个条件,所以检查中断是否被触发,并执行app_L0_wakeup_cb()函数。除此之外,您还应该检查连接在P07上的线实际上是由外部设备或传感器或任何连接在P07引脚上的东西所切换的。
由于MT_dialog
太,
谢谢。对于输入。
今天早上我确实验证了P0_7引脚是否正在设置。它是由外部MCU驱动,我设置了一个测试切换。我可以从DA14580代码中读取状态,因此连接看起来很好。
我也看过da寄存器,我看到了在wkup_select_p0_reg和wkup_pol_p0_reg中为高极性设置的p0_7。我还看到WKUP_CTRL_REG中启用了唤醒中断。
我以前尝试过消除arch_ble_ext_wakeup_get()条件,但是将重新访问该条件,看看是否能够以某种方式验证正在触发中断。我发现在调用睡眠模式时很难调试。
问候,马克斯
太,
一些额外的信息。这种设计与我们之前的设计相比没有32kHz水晶。我假设我们可以使用内部低速振荡器和我将GFG_LP_CLK配置为LP_CLK_RCX20。看着设置有点“额外的低腐烂”。我不确定这意味着什么。此外,我已经阅读了另一个关于使用RCX20的另一个帖子,即可能需要一些PMU设置?我不确定在那里做什么,如果这会影响唤醒中断。我们正在运行几个AA电池,用于测试3.3V,但最终将移动到可能具有稍低电压的硬币电池。
谢谢你,马克斯
嗨Max44,
由于您以Buck模式运行,因此无法使用外部XTAL32,并且您可以通过使用LP_CLK_RCX20定义CFG_LP_CLK来配置,因此我不会以上面提到的“额外的低频”来实现您的意思您应该做的唯一配置以便使用内部RCX振荡器,并且我不认为这将影响580的唤醒定时器模块。
由于MT_dialog
太,
所以可以自动发生降压模式?无需配置设置?
我提到的“Extra low frequency”在数据表中的寄存器CLK_RCX20K_REG中有一点。我查看了该寄存器,以验证RCX20是否已启用。如果你说RCX20由LP_CLK_RCX20正确配置,我不会担心它。
所以…谢谢你提供的额外信息。我又开始尝试确定是否唤醒中断被触发了。
问候,马克斯
嗨Max44,
是的,该设备将根据使用每次系统为启动的硬连线状态机进行激活的外部连接,自动检测应用程序的操作模式,没有额外的组合,应该在SDK中完成。相同的代表通过通过#define将来自RCX和XTAL32的LP时钟更改为OBS,该设备将自动配置并通过SDK启用正确的振荡器。
由于MT_dialog
嗨max,
我的开发的基本来源也是BLE_APP_SLEEPMODE参考设计。
也许你有同样的问题,我也有。
在函数void user_app_adv_start它是写的:arch_set_deep_sleep()!
如果您正在使用扩展的睡眠模式,这是错误的。
然后切换到arch_set_extended_sleep()
花费我2天,因为在SleepMode中,调试器功能有限。
希望你有个美好的一天
欢呼声Siegmar
谢谢Siegmar。我会保持深度睡眠模式。
马克斯
太,
我终于把这一切都弄好了。正如你说的,RCX20振荡器工作良好,我从P0_7被外部MCU切换中断和回调。我在app_easy_wakeup_set的设置中发现了一个错误。我从示例中复制了回调,但没有将其更改为我的例程,从而导致了故障。我在最初的帖子中更正了这一点,这样其他人就不会把它当成一个不好的例子。
所以我们对这个问题很好,你可以关闭这个话题。再次感谢您通常的良好支持。
马克斯
嗨Max44,
谢谢你让我们知道,总是一种乐趣。
最好的问候mt_dialog.