CH57x,CH58x,CH59x等BLE芯片的休眠回调作用及使用方法

简介:

  在芯片工作期间,如果程序不是所有时刻都有任务在运行,因此在系统空闲期间,这些工作电流其实是浪费掉的,加入一些处理可以控制芯片在无tmos任务运行时使其进入低功耗,等到有任务需要执行前(1ms-1.2ms)提前唤醒。
  在BLE蓝牙库中,就有这么一项低功耗处理机制:由于tmos时钟源来自于低速时钟,在休眠期间低速时钟会保持运转,并且由于我们每次配置tmos任务的运行时间时,都会传入一个时间参数给协议栈,因此任意时刻,蓝牙库内部都是知道这些任务应该在什么时刻执行,并且哪些时间点是没有任务需要执行的,于是在我们初始化蓝牙库阶段,可以注册一个回调任务:

 

如果cfg.idleCB没有传入函数指针,则代表无休眠处理措施,如果传入了函数指针,则蓝牙库底层会以一定的间隔查询该函数的返回值:

只有返回值为0,才会代表芯片成功进入休眠,并且唤醒后底层会进行一次时序的校准,其他任意值都不会进行校准;

 

下图可直观地看到任务的执行与无任务执行期间,芯片电流的变化趋势:

 

优缺点:

优点:1、工作期间可以节省大量电流消耗;2、管理很便捷,只需掌握tmos任务的编写以及如何调用,对于任务量较小的程序比较适用;

缺点:这种处理高度依赖tmos系统的管理,一旦脱离了tmos任务的管理,比如说while主循环中有一些自定义的任务在执行,但是这些任务tmos是不知道的,一旦进入休眠,这些主循环的处理都是会停止的,最终会出现外设工作不正常的现象。

 

应用拓展:

可以自定义一个休眠标志,在休眠时间到达后,关停所有任务,并将休眠标志置1,允许底层管理进入休眠:

 

posted @ 2025-01-10 15:12  oTvTo  阅读(396)  评论(0)    收藏  举报