微秒 ticker
实施微秒自动收录器使 Mbed OS 能够执行需要精确计时的操作。您可以使用此 API 来安排事件,记录已用时间并执行亚毫秒延迟。
假设
定义的行为
- 据报道频率介于 250KHz 和 8MHz 之间。
- 有一个至少 16 位宽的计数器。
- ticker_init 函数可以安全地重复调用。
- ticker_init 函数允许自动收报机继续计数并禁用自动收报机中断。
- Ticker 频率非零,计数器至少为 8 位。
- ticker 以(1 << 位)滚动并从 0 开始继续计数。
- ticker 按指定频率加上或减去 10% 计算。
- ticker 每增加 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。
- 调用 us_ticker_free 后调用 us_ticker_init 以外的任何函数。
注意
实现此 API 时,请注意以下常见故障区域:
- 重复计划时,ticker 不会漂移
- 当它滚动时,ticker 会继续计数
- 当比较值设置为 0 并发生溢出时,ticker 中断将触发
依赖
要实现此 API,器件必须具有硬件计数器,其计数值至少为 16 位宽,并且可以在 250KHz 和 8MHz 之间工作。
实现微秒 ticker API
您可以在以下头文件中找到微秒 ticker API 的 API 和规范:
要在 Mbed OS 中启用微秒 ticker 支持,请在 targets.json 文件的目标部分的 device_has 选项中添加 USTICKER 标签。
测试
Mbed OS HAL 为微秒 ticker 提供了一组一致性测试。您可以使用这些测试来验证实现的正确性。要运行微秒 ticker HAL 测试,请使用以下命令:
mbed test -t <toolchain> -m <target> -n tests-mbed_hal-common_ticker*,tests-mbed_hal-us_ticker*
您可以阅读有关测试用例的更多信息: