Alcor6L/eLua/tmr
此模块包含用于访问 eLua CPU 硬件定时器的函数。此外,如果启用了虚拟定时器(有关详细信息,请参阅此处和此处),则可以使用它们,就像使用“常规”(硬件)定时器一样,只有一个例外:您无法设置虚拟定时器的时钟(使用 tmr.setclock
)。要将此模块与虚拟定时器一起使用,请将 tmr.VIRTx 指定为定时器 ID,而不是数字。例如,如果 eLua 映像配置为支持 4 个虚拟定时器,则可以使用 tmr.VIRT0
到 tmr.VIRT3
作为定时器 ID 来访问它们。系统定时器也可以使用所有这些函数,方法是省略定时器 ID 或将其指定为 tmr.SYS_TIMER
。
此模块中以及 eLua 的其他部分(超时)中的所有“时间单位”(延迟、时间差异)都以微秒(μs)表示。但是,请记住,实际定时器分辨率取决于许多因素。例如,tmr.delay
函数很可能无法以您指定的精确时间(以 μs 为单位)延迟,因为实际延迟取决于许多变量,最重要的是定时器的基准时钟和定时器计数器寄存器的尺寸(在某些平台上为 32 位,在大多数平台上为 16 位,其他值不太常见)。为了确保您请求的延迟是可实现的,请使用 tmr.getmindelay
和 tmr.getmaxdelay
分别获取定时器上可实现的最大和最小等待时间。即使您的延迟在这些限制范围内,此函数的精度仍然变化很大,主要取决于定时器基准时钟。如果平台上提供系统定时器,则强烈建议使用它,因为它可以消除上述问题。
等待指定时间段,然后返回。
tmr.delay( id, period )
- id - 定时器 ID。使用 nil 或 tmr.SYS_TIMER 指定系统定时器。
- period - 等待时间(以 μs 为单位)。
读取定时器计数器寄存器。
counter = tmr.read( [id] )
- id(可选) - 定时器 ID。使用 nil 或 tmr.SYS_TIMER 指定系统定时器。如果未指定,则默认为 nil。
返回值
- counter - 定时器计数器寄存器的值。
启动指定的定时器。
counter = tmr.start( [id] )
- id(可选) - 定时器 ID。使用 nil 或 tmr.SYS_TIMER 指定系统定时器。如果未指定,则默认为 nil。
返回值
- counter - 定时器启动时定时器计数器寄存器的值。
计算两个定时器计数器值(通过调用 tmr.read 或 tmr.start 获取)之间的时间差。
delta = tmr.gettimediff( id, start, end )
- id - 定时器 ID。使用 nil 或 tmr.SYS_TIMER 指定系统定时器。
- start - 初始计数器值。
- end - 最终计数器值。
返回值
- delta - 时间差(以 μs 为单位)。
start 和 end 的顺序很重要。end 必须对应于在 start 之后发生的时间点。该函数知道如何处理单个定时器溢出条件(end 小于 start);如果定时器在 start 和 end 之间溢出了 2 次或更多次,则此函数的结果将不正确。
计算过去(通过调用 tmr.read 或 tmr.start 获取)的计数器值与当前时间对应的计数器值之间的时间差。
delta = tmr.getdiffnow( id, start )
- id - 定时器 ID。使用 nil 或 tmr.SYS_TIMER 指定系统定时器。
- start - 初始计数器值。
返回值:时间差(以 μs 为单位)。
获取指定定时器上可实现的最小延迟。
mindelay = tmr.getmindelay( [id] )
- id(可选) - 定时器 ID。使用 nil 或 tmr.SYS_TIMER 指定系统定时器。如果未指定,则默认为 nil。
返回值
- mindelay - 指定定时器上可实现的最小延迟(以 μs 为单位)。
获取指定定时器上可实现的最大延迟。
maxdelay = tmr.getmaxdelay( [id] )
- id(可选) - 定时器 ID。使用 nil 或 tmr.SYS_TIMER 指定系统定时器。如果未指定,则默认为 nil。
返回值
- maxdelay - 指定定时器上可实现的最大延迟(以 μs 为单位)。
设置定时器时钟(用于递增定时器计数器寄存器的时钟)。
clock = tmr.setclock( id, clock )
- id - 定时器 ID。使用 nil 或 tmr.SYS_TIMER 指定系统定时器。
- clock - 定时器时钟(以 Hz 为单位)。
返回值
- clock - 设置在定时器上的实际时钟(以 Hz 为单位)。根据硬件,这可能与时钟参数的值不同。注意:此函数不适用于虚拟定时器或系统定时器。
获取定时器时钟(用于递增定时器计数器寄存器的时钟)。
clock = tmr.getclock( [id] )
- id(可选) - 定时器 ID。使用 nil 或 tmr.SYS_TIMER 指定系统定时器。如果未指定,则默认为 nil。
返回值
- clock - 定时器时钟(以 Hz 为单位)。
设置定时器匹配中断。仅在启用中断支持时可用,有关详细信息,请查看此处。
tmr.set_match_int( id, period, type )
- id - 定时器 ID。如果为
nil
,则默认为系统定时器(但请注意,这仅出于一致性原因,因为系统定时器无法生成中断)。 - period - 中断周期(以微秒为单位)。将其设置为 0 将禁用定时器匹配中断。
- type -
tmr.INT_ONESHOT
用于在 period 微秒后生成单个中断,或tmr.INT_CYCLIC
用于每 period 微秒生成一次中断。