基本设计套件开发
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 set。
在广告完整的例程中调用睡眠我正在做的:
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),//选择dialog_wakeup pin p0_7
wkupct_pin_polarity(gpio_port_0,gpio_pin_7,wkupct_pin_polarity_high),//极性高
1,// 1事件
0);// debouncing time = 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上连接的线路实际上由外部设备或SESNOR或在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模式是自动发生的吗?不需要配置设置?
我提到的“额外的低频”在数据表中的寄存器clk_rcx20k_reg中有点。我看着那个寄存器来验证RCX20是否已启用。如果您说LP_CLK_RCX20正确配置的RCX20,我将不会担心它。
所以.....感谢附加信息。我回到试图确定唤醒中断是否触发。
问候,最大
嗨max44,
是的,设备将自动检测应用程序的操作模式,这取决于使用硬连接状态机所建立的外部连接,该状态机在每次系统上电时都被激活,SDK中不需要做任何额外的配置。相同的立场从RCX和XTAL32改变LP时钟通过#定义设备将自动配置和启用适当的振荡器通过SDK。
谢谢mt_dialog.
你好,马克斯,
我开发的基本源代码也是ble_app_sleepmode参考设计。
也许你有同样的问题,我也有了。
在void user_app_adv_start函数中这样写:arch_set_deep_sleep() !
如果你在延长睡眠模式下工作,这是错误的。
然后你必须更改为ARCH_SET_EXTEDDE_SLEEP()
花费了我2天的时间,因为在睡眠模式下调试器的功能是有限的。
祝你过得愉快
欢呼Siegmar.
谢谢Siegmar。我不会进入深度睡眠模式。
最大限度
公吨,
我终于得到了这一切。正如您所说,RCX20振荡器正常工作,我正在通过外部MCU切换P0_7的中断和回调。我发现的是app_easy_wakeup_set的设置中的错误。我从这个例子中复制了回调,并没有将其更改为我的例程,从而导致故障。我在原来的帖子中纠正了这一点,所以不会被视为看这个的其他人的榜样。
所以我们在这个问题上很好,你可以结束这个话题了。再次感谢您一贯的大力支持。
最大限度
嗨max44,
谢谢你告诉我们,很荣幸。
MT_dialog问好