Mbed OS 文档翻译 之 参考(贡献(移植目标(低功耗 Ticker)))

低功耗 Ticker

实现低功耗 ticker 使 Mbed OS 能够执行仅需要毫秒精度的功率高效的定时操作。您可以使用此 API 来安排事件,记录已用时间并驱动无滴答操作系统调度程序。

假设

定义的行为

  • 据报道频率介于 8KHz 和 64KHz 之间。
  • 有一个至少 12 位宽的计数器。
  • 继续在深度睡眠模式下操作。
  • ticker_init 函数可以安全地重复调用。
  • ticker_init 函数允许 ticker 继续计数并禁用 ticker 中断。
  • Ticker 频率非零,计数器至少为 8 位。
  • Ticker 翻转(1 << 位)并从 0 开始继续计数。
  • Ticker 按指定的频率加上或减去 10% 计数。
  • Ticker 每个 tick 增加 1。
  • 仅当 Ticker 时间增加到或超过 ticker_set_interrupt 设置的值时,才会触发 Ticker 中断。
  • 在调用处理程序之前重复调用 ticker_set_interrupt 是安全的。
  • 函数 ticker_fire_interrupt 导致 ticker_irq_handler 立即从中断上下文调用。
  • Ticker 操作 ticker_read,ticker_clear_interrupt,ticker_set_interrupt 和 ticker_fire_interrupt 完成时间不到 20us。

未定义的行为

  • 在 Ticker 初始化之前调用除 ticker_init 之外的任何函数。
  • 如果时间换行并且与 ticker_set_interrupt 再次设置的值匹配,则是否第二次调用 ticker_irq_handler。
  • 使用大于支持的位数的值调用 ticker_set_interrupt。
  • 调用 lp_ticker_free 后调用 lp_ticker_init 以外的任何函数。

注意

实现此 API 时,请注意以下常见故障区域:

  • 反复重新安排时,Ticker 不会漂移
  • Ticker 在翻身时会继续计数
  • 当比较值设置为 0 并发生溢出时,Ticker 中断将触发

处理同步延迟

一些低功耗代码需要多个低功耗时钟周期来进行 ticker_set_interrupt 设置生效的比较值。此问题进一步复杂化,通常无法设置新的比较值,直到第一个生效。因此,当您无延迟地对 ticker_set_interrupt 进行背对背调用时,第二次调用会阻止并违反上述要求,即 ticker_set_interrupt 在 20us 内完成。

为满足此时序要求,具有此同步延迟的目标必须将 LPTICKER_DELAY_TICKS 设置为调用 ticker_set_interrupt 生效所需的低功耗时钟周期数。当目标设置此值时,定时器代码会阻止 lp_ticker_set_interrupt 在该时钟周期内被调用两次。它通过使用微秒时间来安排在将来某个日期发生写入。

依赖

硬件低功耗 Ticker 功能。

实现低功耗 Ticker API

您可以在以下头文件中找到低功耗 Ticker API 的 API 和规范:

低功耗 Ticker

要在 Mbed OS 中启用低功率 Ticker 支持,请在 targets.json 文件的目标部分的 device_has 选项中添加 LPTICKER 标签。

测试

Mbed OS HAL 为低功率 Ticker 提供了一组一致性测试。您可以使用这些测试来验证实现的正确性。要运行低功耗 Ticker HAL 测试,请使用以下命令:

mbed test -t <toolchain> -m <target> -n tests-mbed_hal-common_ticker*,tests-mbed_hal-lp_ticker*

您可以阅读有关测试用例的更多信息:

低功耗 Ticker

Ticker 测试

低功耗 Ticker 测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值