嗨,各位,
我可以设置prox\u reporter项目来执行广告超时并进入长时间睡眠。这很好——广告做了几次突发事件,然后进入长时间睡眠。我得到了大约1.6uA的电流。
但是,如果我设置“CFG\u EXT\u SLEEP\u WAKEUP\u TIMER1”并更改*其他内容*,我会在广告间隔处得到mA峰值,而且它永远不会停止。那不好。似乎timer1正在重置广告应该已经超时的事实。
我该怎么避免呢?
Thanks.
设备:
嗨,各位,
我可以设置prox\u reporter项目来执行广告超时并进入长时间睡眠。这很好——广告做了几次突发事件,然后进入长时间睡眠。我得到了大约1.6uA的电流。
但是,如果我设置“CFG\u EXT\u SLEEP\u WAKEUP\u TIMER1”并更改*其他内容*,我会在广告间隔处得到mA峰值,而且它永远不会停止。那不好。似乎timer1正在重置广告应该已经超时的事实。
我该怎么避免呢?
Thanks.
好吧,用CFG\u EXT\u SLEEP\u WAKEUP\u Timer1启用Timer1并不是我想要的。Timer1只运行一次广告停止,然后立即唤醒BLE系统。
我想要的是Timer1一直在运行,不管BLE是在做广告、跑步还是其他什么。我想大约每15/16毫秒切换一次GPIO,不管BLE、non BLE、active、extended sleep等发生了什么,我不希望Timer1真的导致BLE重新启动。
因此,问题变成:
1) 我在timer1\u interrupt\u处理程序中设置了一个timer1\u标志,当它启动时,然后从\u sleep()调用app\u resume\u system\u。这样做对吗?
2) 我需要在configure\u timer1\u wakeup中调整reload\u val——我将其设置为16。这是我遇到的第一个怪事。无论我将reload\u值设置为什么值,我的示波器都会显示app\u resume\u system\u from\u sleep()中的处理程序在140.944ms到140.952ms之间触发。为什么u值没有影响?编辑:timer1配置了TIM1\u FREE\u RUN\u ON忽略重新加载值。切换到TIM1\u FREE\u RUN\u OFF修复了此问题。
3) 我必须在某个地方添加一个处理程序,最终查找timer1\u标志。我从睡眠()添加到应用程序恢复。是那个地方吗?
4) 我得做点什么防止布尔醒来。我试图在app\u resume\u from \u sleep()中检查计时器1\u标志是否已设置。如果是这样,我将跳过整个arch\u ble\u ext\u wakeup\u get()代码块。然而,这似乎是不够的,或者它可能是完全错误的地方。如果我看一下我的Keithley源表,我会看到这个系统在1秒的脉冲中产生了大约14uA的电流,安静的时间只有4秒。这看起来和我的广告参数(1秒/5秒)一模一样,所以我仍然在做一些能启动BLE系统的事情。我该怎么阻止呢?
Thanks.
嗨,安德鲁,
当播发在预定义的时间量后停止时,会配置计时器1–请参阅.advertise\u period和。用户配置文件中的高级场景。
当设备停止播发时,将触发app\u advertive\u complete()回调,并进行timer1配置-configure\u timer1\u wakeup()。
如果您检查count\u options配置结构,您将看到timer1 reload值设置为TIM1\u reload\u MAX(11位)。此外,输入时钟是低功耗时钟,特别是内部RCX(请参阅da1458x\u config\u advanced.h中的CFG\u LP\u CLK宏)
鉴于此,timer1_interrupt_hdlr()将triggered every : (1/15000) * 2^11 ~= 0.1365 sec or 136.5 msec.
当定时器1\u interrupt\u hdlr()被触发时,系统将从睡眠状态恢复。
>>我想大约每15/16毫秒切换一次GPIO,不管BLE、non BLE、active、extended sleep等发生了什么,我不希望Timer1真的导致BLE重新启动。
Probably you could change the timer1 reload value and in the timer1_interrupt_hdlr() toggle the GPIO
在SDK的proxèu reporter示例中,定时器1用于将DA14531从睡眠模式唤醒。因此,我的建议是从空的\u模板开始,在这个项目中移植Timer1配置。
Thanks, PM_Dialog
问题是,当系统出于任何原因退出睡眠状态时,它会再次开始发布广告。因此,启用最大为136.5ms的定时器1可以有效地使系统从不离开广告模式。
嗨,安德鲁,
正如我在前面的评论中提到的,当广告停止时,timer1\u interrupt\u hdlr()将在136.5毫秒后启动。因此,芯片将休眠约136.5毫秒,然后再次唤醒。
Thanks, PM_Dialog