开发的基本设计工具包
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,但这里我有:
静态孔隙app_L0_wakeup_cb(空白)
{
如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))
{
periph_init ();
}
如果(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寄存器,我看到P0_7被选中,并在WKUP_SELECT_P0_REG和WKUP_POL_P0_REG中设置为高极性。我还看到WKUP_CTRL_REG中启用了唤醒中断。
我以前尝试过消除arch_ble_ext_wakeup_get()条件,但是将重新访问该条件,看看是否能够以某种方式验证正在触发中断。我发现在调用睡眠模式时很难调试。
问候,马克斯
太,
一些额外的信息。这个设计与我们以前相比没有一个32KHz的晶体附着。我假设我们可以使用内部的低速振荡器,我配置GFG_LP_CLK到LP_CLK_RCX20。看一下设置有一个"超低频率"的设置。我不确定这到底是什么意思。另外,我在另一篇关于使用RCX20的文章中读到可能需要一些PMU设置?我不确定在那里做什么,如果这将影响得到唤醒中断。我们正在用一对3。3v的AA电池进行测试,但最终将转移到一个电压稍低的硬币电池。
谢谢你,马克斯
嗨Max44,
因为你是在巴克运营模式不需要使用一个外部XTAL32和您可以配置,通过定义LP_CLK_RCX20 CFG_LP_CLK使用,我不明白你的意思与“额外的低频率”,我上面提到的是你唯一应该做的为了配置操作与内部RCX振荡器,我认为这不会影响580的唤醒定时器模块。
由于MT_dialog
太,
buck模式是自动发生的吗?不需要配置设置?
我提到的“Extra low frequency”在数据表中的寄存器CLK_RCX20K_REG中有一点。我查看了该寄存器,以验证RCX20是否已启用。如果你说RCX20由LP_CLK_RCX20正确配置,我不会担心它。
所以…谢谢你提供的额外信息。我又开始尝试确定是否唤醒中断被触发了。
问候,马克斯
嗨Max44,
是的,设备将自动检测应用程序的操作模式,这取决于使用硬连接状态机所建立的外部连接,该状态机在每次系统上电时都被激活,SDK中不需要做任何额外的配置。相同的立场从RCX和XTAL32改变LP时钟通过#定义设备将自动配置和启用适当的振荡器通过SDK。
由于MT_dialog
你好,马克斯,
我开发的基本源代码也是ble_app_sleepmode参考设计。
也许你有同样的问题,我也有。
在void user_app_adv_start函数中这样写:arch_set_deep_sleep() !
如果你在延长睡眠模式下工作,这是错误的。
然后切换到arch_set_extended_sleep()
花费了我2天的时间,因为在睡眠模式下调试器的功能是有限的。
祝你过得愉快
欢呼声Siegmar
谢谢Siegmar。我不会进入深度睡眠模式。
马克斯
太,
我终于把这一切都弄好了。正如你说的,RCX20振荡器工作良好,我从P0_7被外部MCU切换中断和回调。我在app_easy_wakeup_set的设置中发现了一个错误。我从示例中复制了回调,但没有将其更改为我的例程,从而导致了故障。我在最初的帖子中更正了这一点,这样其他人就不会把它当成一个不好的例子。
所以我们在这个问题上很好,你可以结束这个话题了。再次感谢您一贯的大力支持。
马克斯
嗨Max44,
谢谢你告诉我们,很荣幸。
MT_dialog问好