ST BlueNRG-LP、BlueNRG-LPS 定時器模塊

關鍵字 :STWirelessBLE
BlueNRG-LP、BlueNRG-LPS 是超低功耗的 BLE 單模片上系統,符合 Bluetooth®規範。其架構核心是 32 位的 Cortex[1]M0+。 本文檔介紹管理 BlueNRG-LP、BlueNRG-LPS 鏈路控制器定時器的軟體模塊的特性和功能。

定時器模塊庫由兩層不同程度的抽象組成,允許應用程序對與設備喚醒、用戶超時或預配置的無線觸發相關的事件進行編程。 因此,任何 BLE 和私有無線應用均基於定時器模塊庫。

模塊包括四個文件 : rf_driver_hal_vtimer.c 、 rf_driver_hal_vtimer.h 、 rf_driver_ll_timer.c,以及 rf_driver_ll_timer.h。這些文件代表將應用程序與硬體分開的兩個層。 第一層通過允許虛擬化設備上可用資源的軟體結構抽象硬體計時器。第二層直接連接到硬體,可將以“不依賴 於硬體的單位”表示的時間轉換為“依賴於硬體的單位”,反之亦然。這些轉換考慮了硬體定時器的計數速率。



BlueNRG-LP、BlueNRG-LPS 鏈路控制器提供定時器計數器,用於喚醒處於低功耗模式階段的設備(而非用於觸發無線操作)。定時器模塊利用單個定時器的硬體資源,實現多個虛擬定時器的分配。對虛擬定時器數量的唯一限制是設備上的可用內存空間。

虛擬定時器類似於普通定時器。例如,用戶可以對虛擬定時器進行編程,以便在特定的時間執行某些動作。從應用程序的角度來看,虛擬定時器是一個軟體結構,除了到期時間外,還包含指向某些用戶數據和回調的指針。回調是在時間耗盡時執行的例程。該軟體抽象允許在應用程序定義的虛擬定時器之間共享硬體定時器的功能。

虛擬定時器啟動後,其實例將被放置在按到期時間排序的隊列中。如果虛擬定時器先於隊列中的其他事件運行,則將其置於頂部,並對硬體定時器進行編程。否則,當輪次達到時,虛擬定時器會在其他已經啟動的定時器之間發生。當一個虛擬定時器到期後,內部狀態機負責執行鏈接到剛剛到期的虛擬定時器的回調,並為隊列中的下一個定時器保留硬體計數器。虛擬定時器的超時被視為絕對時間。這意味著,它像日曆上某個特定時間的事件一樣發生。

       除了由虛擬定時器共享的定時器之外,另一個定時器能夠觸發無線電活動。在大多數情況下,無線事件的定時是一個關鍵方面,必須保證一定的準確性。

低速振盪器為 BlueNRG-LP、BlueNRG-LPS 鏈路控制器定時器饋送信號。根據配置,低速振盪器源可以是外部XO或內部 RO。與外部振盪器不同,內部振盪器的速度可以改變,因其會受到溫度的影響。這意味著,如果由內部振盪器計時,則定時器可以根據不固定的周期進行計數。

在所有利用 BlueNRG-LP、BlueNRG-LPS 鏈路層定時器的應用程序內部,總是調用三個 API。 HAL_VTIMER_Init()。它根據低速振盪器的類型和高速時鐘的啟動時間來初始化定時器模塊。此外,它還啟 動負責觸發校準過程和虛擬時基維護操作的虛擬定時器。 該信息包含在下面定義的專用結構中:

typedef struct HAL_VTIMER_InitS {

 /* XTAL startup in 2.44 us unit */

uint16_t XTAL_StartupTime;

 /* Enable initial estimation of the frequency of the Low Speed Oscillator */

BOOL EnableInitialCalibration;

/* Periodic calibration interval in ms, to disable set to 0 */

uint32_t PeriodicCalibrationInterval; } HAL_VTIMER_InitType;



XTAL_StartupTime 是高速時鐘穩定下來所需的時間。該值以系統時間單位表示,

對於無線電操作的定時特別有用。標誌 EnableInitialCalibration 允許在初始化期間估算低速振盪器的頻率。一般情況下,如果採用外部晶體振盪器,則可將該標誌置零以禁用初始估算。 PeriodicCalibrationInterval 以毫秒為單位,表示低速振盪器的測量頻率(視溫度變化)。同樣在這種情況下, 如果採用外部晶體振盪器,則可選擇等於零的校準間隔來禁用定期校準。

HAL_VTIMER_Tick():該 API 在應用程序主循環中調用。它負責管理虛擬定時器隊列,檢查虛擬定時器是否 到期,管理硬體定時器資源的共享機制以及到期定時器的用戶回調執行。 如果 PeriodicCalibrationInterval 不等於零,則會在校準定時器到期後定期啟動校準過程。如果校準定時器尚 未到期,但設備處於活動狀態,則可提前啟動校準過程。

HAL_VTIMER_TimeoutCallback():該 API 在專用定時器 IRQ 處理程序中調用。它在硬體定時器到期時執行, 向應用程序發出信號。注意,該 API 不屬於用戶定義的回調。
void CPU_WKUP_IRQHandler(void)

{
    HAL_VTIMER_TimeoutCallback();
}

      BlueNRG-LP、BlueNRG-LPS 提供另一個定時器,專門用於觸發無線電事務(可以是發送或接收)。特別是, 定時器模塊庫提供了一種可能性 - 對與無線電操作相關的兩個不同事件進行編程:

1.通過空中傳輸的第一個傳輸比特

2.接收窗口的開始

注意,定時器模塊只編程無線電定時器,而不為傳輸或接收配置無線電。此外,定時器模塊沒有對背靠背通信 的超時進行編程。一個專用的軟體庫可以完成這兩項任務。若需更多信息,請參考無線電驅動程序用戶手冊。 無線電定時器不像虛擬定時器那樣在定時器隊列中虛擬化(無必要性),但即使在這種情況下,用戶也必須將 前述兩事件之一的到期時間(以 STU 為單位)表示為將來的絕對時間。此外,無線電定時器在軟體結構中被 抽象出來,但無需用戶的任何動作。如果超時時間太近,則對定時器進行編程的請求將被拒絕並返回錯誤代碼。

更多詳細信息請參考:AN5469。

★博文內容參考自 網站,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

參考來源

false: https://www.st.com/content/ccc/resource/technical/document/application_note/group1/7e/96/8f/0c/96/d2/4d/5b/DM00692325/files/DM00692325.pdf/jcr:content/translations/zh.DM00692325.pdf

評論