BLE堆栈中禁用中断的最长时间是多少?
我使用的是DA14681开发工具包(PRO)和pxp\u报告器示例。我修改了这个示例以添加一个hw\u timer0,在timer ISR中,我只需切换一个I/O行并查看O-scope上的周期。定时器配置为每500微秒中断一次,但我看到o型示波器上的抖动大于200微秒。但是,当我禁用pxpƏreporter任务(注释掉了该任务的创建)时,这种抖动会减少(~20微秒)。
这是我的定时器配置代码。如果计时器配置正确,请告诉我。
hw\u timer0\u init(空);
设置时钟源(时钟快速);
计时器0设置快时钟div(计时器0快时钟div 2);
hw\定时器0\设置\ pwm\模式(hw\定时器0\模式\时钟);
计时器0设置0重新加载(20002000);
重新加载时设置计时器(200);
hw\u timer0\u register\u int(定时器中断\u cb);
hw_timer0_enable();
关键词:
设备:
你好,克文卡特拉曼,
问题是,在BLE进入休眠状态之前,它会禁用中断约600us,这应该会导致您看到的抖动,即使设备始终处于活动状态,也会发生这种情况,因为BLE内核和系统的其余部分在断电时是分开的。您可以尝试使用adu table\u stay\u active(true),这将强制ble保持活动状态,并减少由休眠和唤醒ble引起的任何中断延迟。
谢谢你的对话
添加“ad\u ble\u stay\u active(true)”消除了抖动。
这是唯一的解决办法吗?如果是的话,耗电量呢?
你好,克文卡特拉曼,
是的,就我所知,这是唯一有效的解决方法,您必须让BLE核心始终处于唤醒状态,以避免唤醒和睡眠的中断延迟,关于功耗,通过对近距离报告器的一些初步测量,如果BLE保持活动,并且在每个BLE事件中都没有醒来,那么它将额外增加约0.4mA。
谢谢你的对话