S32K144入門筆記(十三):LPIT的API函數解讀

目錄

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文件中定義,另一個是寄存器的位域,這個要查看用戶手冊。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72662.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72662.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72662.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSS - Pseudo-classes(偽類選擇器)

目錄 一、介紹二、常用種類三、案例實現案例一:a標簽使用link/visited/hover/active案例二:表單元素使用focus/disabled案例三、通過其余偽類實現元素靈活選中 一、介紹 CSS 偽類(Pseudo-classes) 用于定義元素的特定狀態或結構位…

http proxy的原理是什么

Http代理的原理 代理服務器會自動提取請求數據包中的HTTP請求數據發送給服務端,并將服務端的HTTP響應數據轉發給發送請求的客戶端,HTTP代理服務器使用的端口通常是8080。 對于Web客戶端來說,代理扮演的服務器角色,接收請求&…

Ubuntu22.04虛擬機里安裝Yolov8流程

1. 安裝pytorch sudo apt install nvidia-cuda-toolkit nvcc --version # 官方適配地址:https://download.pytorch.org/whl/torch/import torch print(torch.__version__) print(torch.cuda.is_available())2. 安裝環境 # cuDNN 安裝:https://develop…

神經網絡微調技術解析

神經網絡微調技術 微調(Fine-tuning)是遷移學習的核心技術,通過在預訓練模型基礎上調整參數,使其適應特定任務或領域。以下從傳統方法、參數高效微調(PEFT)、新興技術三個維度展開,覆蓋主流技術…

Spring 聲明式事務管理

Spring 編程的方式實現事務管理,這樣太過麻煩,需要在每個方法上面加上相應的事務處理操作,聲明式事務處理能夠很好的解決這個問題,比如通過tx命名空間,這樣只需要配置就可以檢測到相關的方法,或者是通過tra…

電機控制常見面試問題(十五)

文章目錄 一、電機氣隙二、電氣時間三.電機三環控制詳解四.驅動板跳線意義五.電機開環自檢 一、電機氣隙 電機氣隙是定子和轉子之間的空隙,防止釘子轉子運轉時物理接觸,此外,氣隙是磁路的重要環節,磁場需通過氣隙傳遞能量&#x…

代碼隨想錄算法訓練營第六十五天| 圖論10

Bellman_ford 隊列優化算法(又名SPFA) 代碼隨想錄 import collectionsdef main():n, m map(int, input().strip().split())edges [[] for _ in range(n 1)]for _ in range(m):src, dest, weight map(int, input().strip().split())edges[src].append…

Chat2DB:讓數據庫管理像聊天一樣簡單

數據庫工具的痛點與破局 在數據爆炸的時代,數據庫管理工具已成為企業高效運營的剛需。然而,傳統工具如Navicat、DBeaver雖功能強大,卻讓非技術人員和SQL新手望而卻步。復雜的界面、繁瑣的手動操作、晦澀的語法規則,成為橫亙在數據…

Navicat for Snowflake 震撼首發,激活數據倉庫管理全新動能

近日,Navicat 家族迎來了一位全新成員 — Navicat for Snowflake。Snowflake 是一款基于云架構的現代數據倉庫解決方案,以其彈性擴展、高性能和易用性著稱。這次首發的Navicat for Snowflake 專為簡化 Snowflake 數據庫管理任務而精心打造。它憑借其直觀…

【項目合集】智能語音小車-微信小程序控制

功能需求: 車子檢測環境溫度、濕度,上報 APP、WEB 端顯示實時數據可通過 APP 控制小車前進、左轉、右轉可通過語音控制小車前進后退車上一個 LED 燈,可通過 WEB、小程序控制在 APP、WEB 上均可注冊登錄 硬件清單 硬件 功能 備注 ESP32 …

人工智能與人的智能,改變一生的思維模型分享【4】決策樹

決策樹( DECISION TREE) 一般由一個決策圖和若干可能的結果組成。是一種通過羅列解題的關鍵步驟以及各步驟發生的條件和結果,由此來創建到達目標的規劃。 我們很早就知道有一個方法,叫做當你苦悶、糾結的時候,把你的所…

利用余弦相似度在大量文章中找出抄襲的文章

我前面的2篇文章分別講了如果利用余弦相似度來判斷2篇文章的相似度,來確定文章是否存在抄襲,和余弦相似度的原理,即余弦相似度到底是怎么來判斷文章的相似性高低的等等。這一篇再說下,對于文章字數多和大量文章時,如果…

設計模式-對象創建

對象創建 前言1. Factory Method1.1 模式介紹1.2 模式代碼1.2.1 問題代碼1.2.2 重構代碼 1.3 模式類圖1.4 要點總結 2. Abstract Factory2.1 模式介紹2.2 模式代碼2.2.1 問題代碼2.2.2 重構代碼 2.3 模式類圖2.4 要點總結 3. Prototype3.1 模式介紹3.2 模式代碼3.3 模式類圖3.4…

SQLAlchemy系列教程:批量插入數據

高效地批量插入數據對于應用程序的性能至關重要。SQLAlchemy為批處理操作提供了幾種機制,可以最大限度地減少開銷并加快數據庫事務時間。在本指南中,我們將探討如何使用SQLAlchemy執行批量插入,包括從基礎技術到高級技術。 搭建環境 在開始之…

V2X驗證

1. 標準和規范驗證 歐洲對 DSRC 和 V2X 系統有一系列的標準和規范,主要由 ETSI (European Telecommunications Standards Institute) 和 IEEE 等組織制定。驗證通常包括以下標準和規范: ETSI EN 302 571:這是DSRC在歐洲的主要標準,規定了DSRC系統的技術要求和操作條件。ET…

openEuler系統遷移 Docker 數據目錄到 /home,解決Docker 臨時文件占用大問題

根據錯誤信息 write /var/lib/docker/tmp/...: no space left on device,問題的根源是 根分區(/)的磁盤空間不足,而非 /home 分區的問題。以下是詳細解釋和解決方案: 問題原因分析 Docker 臨時文件占用根分區空間&…

Matlab 四分之一車輛被動懸架和模糊pid控制對比

1、內容簡介 Matlab 183-四分之一車輛被動懸架和模糊pid控制對比 可以交流、咨詢、答疑 2、內容說明 略 3.1 車輛多自由度模型建立 對于車輛動力學,一般都是研究其懸架系統,懸架系統由輪胎,輪胎空氣,彈簧,減震器和…

LabVIEW旋轉設備狀態在線監測系統

為了提高大型旋轉設備如電機和水泵的監控效率和故障診斷能力,用LabVIEW軟件開發了一套實時監測與故障診斷系統。該系統集成了趨勢分析、振動數據處理等多項功能,可實時分析電機電流、壓力、溫度及振動數據,以早期識別和預報故障。 ? 項目背…

微前端 無界wujie

開發環境配置: Node.js 版本 < 18.0.0 pnpm 腳手架示例模版基于 pnpm turborepo 管理項目 如果您的當前環境中需要切換 node.js 版本, 可以使用 nvm or fnm 進行安裝. 以下是通過 nvm 或者nvs 安裝 Node.js 16 LTS 版本 nvs安裝教程 https://blog.csdn.net/glorydx/artic…

跟網型逆變器小干擾穩定性分析與控制策略優化simulink仿真模型和代碼(包含完整仿真報告)

關注&#xff1a;“電擊小子程高興的MATLAB小屋”獲取巨額優惠 1.模型簡介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2016Rb&#xff09;軟件。建議采用matlab2016 Rb及以上版本打開。&#xff08;若需要其他版本可聯系代為轉換&#xff09; 近年來&#xff0c…