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 微秒生成一次中斷。