亲爱的技术支持,
我正在使用我们自己的定制板,当我尝试将其切入外部睡眠模式时,我有一些局部。
当它从外部睡眠唤醒时,我的主板遵循代码:
if((development_debug)&&(use_power_optimizations))
{
slp_period_retated = slp_period;
//如果此断言命中,则LP ISR持续时间长于时间
//已通过LP_ISR_TIME_XTAL32_CYCLES和LP_ISR_TIME_USEC保留。
if(sleep_lp_cycles &&(sleep_lp_cycles
assert_warning(0);//(它进入此处)
}
}
我不知道为什么它会到来,是我的中断功能占用太多时间吗?
我评论了development_debug的宏跳出来。看起来没问题,我不知道我是对的。
当系统运行一次唤醒后,它无法触发中断。(它是一个来自一个GPIO引脚的外部中断),同时我的串行中断无法触发。
你能给我一些建议吗?
谢谢杰里
设备:
嗨杰瑞,
您是否通过禁用中断而更改了ble_wakeup_lp_handler或延迟BLE唤醒?如果你到那里,这意味着你花了太多时间睡觉,你不会准时醒来,所以SDK警告你。如果580是活动的(没有BLE核心活动),则可能会发生这种情况(无BLE核心活动),并且它为BLE核心唤醒的时间唤醒,因此在禁用中断时的LP_Handler时的时间,因此ISR延迟执行(在某些时候,中断被启用,但处理程序未按时执行),这意味着设备睡眠时间长于定义的时间,并且发生断言。如果删除断言,如果设备已连接,则会松开活动,这可能是一个问题,因为它可以轻松地删除连接。
谢谢mt_dialog.
嗨mt_dialog,
感谢您的回复。
我确定我没有用ble_wakeup_lp_handler做出任何改变,没有延迟唤醒ble的唤醒(代码是dsps的例程,如果它不在上面提到的两个点上运行)
我不是很容易理解你的描述。这意味着我的设备睡到了很多时间?它会影响我的ISR?在我的理解中,内核定时器溢出将触发中断,我将一个计时器设置为系统时基础。所以每1秒钟将醒来,我不认为这是睡眠很长。我可以解决这个问题问题?
另一个问题是使用ISR.IS BLE_WAKEUP_LE_HANDLER函数在启用全局中断后使用?为什么不能使用其他中断,或者它无法执行ISR?(或因为睡眠时间太长了?)
我觉得很困惑。
谢谢杰里
嗨杰瑞,
本质上意味着LP_Hanlder花了太多时间来执行和警告,您得到的意味着它需要更多时间才能唤醒计算的值。Sleep_LP_CYCLES是编程睡眠量,在BLE核心睡眠前,SLP_PERIOD是当最终时测量的实际睡眠,所以如果实际睡眠大于编程,那么我们有一个问题(丢失的BLE事件)。
SDK当谈到BLE这样的工作时,设备计算睡眠量,并且在休眠金额中,应该触发BLE_LP_Handler,现在如果出于任何原因LP_Handler延迟执行,实际睡眠周期将比计算的一个和而不是意味着设备不会及时唤醒,以便为BLE事件提供服务。您所看到的内容与内核定时器无关或您指示设备睡眠多少。
关于你如何解决问题,就像上面提到的那样,在设备唤醒时看到这种行为,并且中断被禁用但是
BLE Core正在睡觉,因此如果它的BLE核心唤醒的时间LP_Handler不会在那时执行,直到中断被重新启用,因此设备
自从BLE核心并没有及时醒来,将错过BLE活动。所以请检查您是否手动禁用代码的任何部分中的中断。
我不太得到最后一个问题,所以将解释唤醒如何发生唤醒,当设备跌至睡眠时,它会禁用中断的WFI()(这意味着中断,但是处理程序不会被调用),因此,在BLE_LP中断中,M0将唤醒,并且它将执行的第一个命令是启用中断,以便为LP_Handler提供服务。
此外,在检查上述任何内容之前,请尝试此操作并检查此工作是否适用于将Bandgap_reg的LDO_RET_TRIM设置为在设备进入时循环之前的值9。
谢谢mt_dialog.
嗨mt_dialog,
我已经解决了我的问题。谢谢你的帮助。
assert_warning警告的第一个问题(0);在我把IIC设备放在Periph_init()的文件中,也许iic运行花费到很多时间,它会产生一些prober m.now,我设置了一个标志和init iiC devie in while循环,它可以正常工作。
ISR的另一个问题,即我没有做一些正确的设置,我找到并解决了它们。
再次感谢你的帮助。