目錄
1. SDK中的函數
2. API函數的釋義
2.1 獲取默認參數
2.2 初始化
2.3 啟動與停止
2.4 計數值的設置于讀取
2.5 中斷API
1. SDK中的函數
? ? ? ? 在使用SDK的非抽象驅動函數時,函數的定義與聲明在文件lpit_driver.c和lpit_driver.h中,一共有19個函數:
void LPIT_DRV_GetDefaultConfig(lpit_user_config_t * const config);
void LPIT_DRV_GetDefaultChanConfig(lpit_user_channel_config_t * const config);
void LPIT_DRV_Init(uint32_t instance,const lpit_user_config_t * userConfig);
void LPIT_DRV_Deinit(uint32_t instance);
status_t LPIT_DRV_InitChannel(uint32_t instance,uint32_t channel,const lpit_user_channel_config_t * userChannelConfig);
void LPIT_DRV_StartTimerChannels(uint32_t instance,uint32_t mask);
void LPIT_DRV_StopTimerChannels(uint32_t instance,uint32_t mask);
status_t LPIT_DRV_SetTimerPeriodByUs(uint32_t instance,uint32_t channel,uint32_t periodUs);
status_t LPIT_DRV_SetTimerPeriodInDual16ModeByUs(uint32_t instance,uint32_t channel,uint16_t periodHigh,uint16_t periodLow);
uint64_t LPIT_DRV_GetTimerPeriodByUs(uint32_t instance,uint32_t channel);
uint64_t LPIT_DRV_GetCurrentTimerUs(uint32_t instance,uint32_t channel);void LPIT_DRV_SetTimerPeriodByCount(uint32_t instance,uint32_t channel,uint32_t count);
void LPIT_DRV_SetTimerPeriodInDual16ModeByCount(uint32_t instance,uint32_t channel,uint16_t periodHigh,uint16_t periodLow);
uint32_t LPIT_DRV_GetTimerPeriodByCount(uint32_t instance,uint32_t channel);
uint32_t LPIT_DRV_GetCurrentTimerCount(uint32_t instance,uint32_t channel);
void LPIT_DRV_EnableTimerChannelInterrupt(uint32_t instance,uint32_t mask);
uint32_t LPIT_DRV_GetInterruptFlagTimerChannels(uint32_t instance,uint32_t mask);
void LPIT_DRV_ClearInterruptFlagTimerChannels(uint32_t instance,uint32_t mask);
2. API函數的釋義
2.1 獲取默認參數
void LPIT_DRV_GetDefaultConfig(lpit_user_config_t * const config)
? ? ? ? 獲取默認的全局設置參數,獲取的參數通過形參指針實現,具體的參數只有兩個:是否使能debug模式下運行和是否使能在打盹模式下運行。
void LPIT_DRV_GetDefaultChanConfig(lpit_user_channel_config_t * const config)
? ? ? ? 獲取默認的通道參數,獲取的參數通過形參指針實現,具體的參數與配置工具的通道設置參數類型一一對應。
? ? ? ? 以上兩個API函數筆者只是測試SDK庫的默認參數時用了一次,平時使用率特別低。
2.2 初始化
void LPIT_DRV_Init(uint32_t instance,
? ? ? ? ? ? ? ? ? ?const lpit_user_config_t *userConfig)
? ? ? ? 初始化LPIT模塊參數,參數正式通過配置工具生成的宏定義和初始化結構體,通過調用該API函數來設置模塊的時鐘、debug時的運行模式、打盹時的運行模式等。
void LPIT_DRV_Deinit(uint32_t instance)
? ? ? ? 該API函數時用來禁止模塊,如果想再次啟用LPIT,則需要調用LPIT_DRV_Init。
status_t LPIT_DRV_InitChannel(uint32_t instance,uint32_t channel,const lpit_user_channel_config_t * userChannelConfig)
? ? ? ? ?初始化定時器通道,有關于通道的設置參數通過配置工具生成的結構體作為形參傳遞并設置。調用該API只是設置了通道的參數并不會啟動定時器。如果想要啟動通道定時器則需要調用LPIT_DRV_StartTimerChannels。如果想要更改計數周期則需要調用LPIT_DRV_SetTimerPeriodByUs或者LPIT_DRV_SetTimerPeriodByCount。
2.3 啟動與停止
void LPIT_DRV_StartTimerChannels(uint32_t instance,uint32_t mask)
? ? ? ? 該API的作用比較單純,就是通過形參來選型具體通道和設置以啟動通道計數器。
void LPIT_DRV_StopTimerChannels(uint32_t instance,uint32_t mask)
? ? ? ? 停止通道計數器,如果是脈沖累加模式,當有脈沖來臨時會加載初值。
2.4 計數值的設置于讀取
status_t LPIT_DRV_SetTimerPeriodByUs(uint32_t instance,uint32_t channel,uint32_t periodUs)
?????????設置定時器的周期計數值,單位為微妙。此處需要注意計數值溢出的問題,需要用戶自己計算好,此函數只能作用于單個通道。
status_t LPIT_DRV_SetTimerPeriodInDual16ModeByUs(uint32_t instance,uint32_t channel,uint16_t periodHigh,uint16_t periodLow)
? ? ? ? 設置定時器通道處于雙16位周期計數器模式時的周期值,單位為微秒。同樣需要注意溢出問題。?
uint64_t LPIT_DRV_GetTimerPeriodByUs(uint32_t instance,uint32_t channel)
? ? ? ? ?獲取定時器的周期值,單位為微秒。如果定時器通道的操作模式為 32 位周期計數器或雙 16 位周期計數器,那么這里返回的周期是有意義的。
uint64_t LPIT_DRV_GetCurrentTimerUs(uint32_t instance,uint32_t channel)
獲取當前計時器通道以微秒為單位的計數值。
- 此函數以微秒為單位返回一個絕對時間戳。
- 此函數的一個常見用途是測量一段代碼的運行時間。在代碼的開頭和結尾調用此函數。這兩個時間戳之間的時間差即為運行時間。
- 只有當計時器通道的操作模式為 32 位周期計數器或雙 16 位周期計數器或 32 位觸發輸入捕獲時,此處返回的計數值才有意義。
- 需要確保運行時間不會超過計時器通道周期。
void LPIT_DRV_SetTimerPeriodByCount(uint32_t instance,uint32_t channel,uint32_t count)
????????以計數單位設置定時器通道周期。
- 此函數以計數單位設置定時器通道周期。
- 正在運行的定時器通道的計數器周期可以通過先設置一個新的加載值來修改,該值將在定時器通道到期后加載。
- 要中止當前周期并以新值啟動定時器通道周期,必須先禁用然后再啟用定時器通道。
void LPIT_DRV_SetTimerPeriodInDual16ModeByCount(uint32_t instance,uint32_t channel,uint16_t periodHigh,uint16_t periodLow)
????????以計數單位設置定時器通道周期。
- 此函數在定時器通道模式為雙 16 周期計數器模式時,以計數單位設置定時器通道周期。
- 正在運行的定時器通道的計數器周期可以通過首先設置新的加載值來修改,該值將在定時器通道到期后加載。
- 要中止當前周期并以新值啟動定時器通道周期,必須先禁用然后再次啟用定時器通道。
uint32_t LPIT_DRV_GetTimerPeriodByCount(uint32_t instance,uint32_t channel)
? ? ? ? 獲取通道的周期計數值。
uint32_t LPIT_DRV_GetCurrentTimerCount(uint32_t instance,uint32_t channel)
????????獲取當前計時器通道的計數值(以計數為單位)。此函數返回實時計時器通道的計數值,該值的范圍為 0 到計時器通道周期。 ? 需要確保運行時間不超過計時器通道周期。?
2.5 中斷API
void LPIT_DRV_EnableTimerChannelInterrupt(uint32_t instance,uint32_t mask)
? ? ? ? ?使能通道的溢出中斷,支持與或操作,如下:
?* ? ? ?- with mask = 0x01u then the interrupt of channel 0 will be enabled
?* ? ? ?- with mask = 0x02u then the interrupt of channel 1 will be enabled
?* ? ? ?- with mask = 0x03u then the interrupt of channel 0 and channel 1 will be enabled
void LPIT_DRV_DisableTimerChannelInterrupt(uint32_t instance,uint32_t mask)
? ? ? ? 禁用通道的溢出中斷,支持與或操作,如下:
?* ? ? ?- with mask = 0x01u then the interrupt of channel 0 will be disable
?* ? ? ?- with mask = 0x02u then the interrupt of channel 1 will be disable
?* ? ? ?- with mask = 0x03u then the interrupt of channel 0 and channel 1 will be disable
uint32_t LPIT_DRV_GetInterruptFlagTimerChannels(uint32_t instance,uint32_t mask)
? ? ? ? ?獲取通道中斷標志位的狀態,參數1是通道的示例號,在配置工具生成的h文件中定義,另一個是寄存器的位域,這個要查看用戶手冊。
void LPIT_DRV_ClearInterruptFlagTimerChannels(uint32_t instance,uint32_t mask)
? ? ? ? ?清除通道的中斷標志位,參數1是通道的示例號,在配置工具生成的h文件中定義,另一個是寄存器的位域,這個要查看用戶手冊。