前言
周期中斷定時器 (Periodic Interrupt Timer, PIT) 模塊顧名思義,就是通過計時行為引發周期性中斷事件的觸發器。本文基于 S32K312 開發板實現延時功能,在此之前先簡單介紹下 PIT 的特性。
1. PIT 模塊特性
根據下圖查表可知,不同型號 S32K3 支持的 PIT 數量不同。最多有 4 組 PIT 模塊,每組有四路 PIT 通道,每路通道長度為 32-bit,其中 PIT_0 可鏈接兩路定時器并組成 64-bit lifetimer 生命定時器

PIT 時鐘源為 AIPS_SLOW_CLK,其中 PIT_0 包含一路 RTI 時鐘源來自 SIRC_CLK(32KHz),可用于Standby模式下的系統喚醒。

可用于引發中斷和觸發DMA通道
PIT 的每個通道都可獨立配置超時時限
如下圖所示,PIT 定時的時長由預裝載值決定,所有通道都是遞減計數方式,當計時器計數到0會觸發定時器中斷,自動重裝載值并立刻進入下一個周期。

2. PIT 驅動配置
在 S32K3 工程的驅動配置界面添加 PIT 組件

依次配置各個功能項
選擇 “GptChannelConfigSet” 選項卡
點擊“加號”按鈕添加定時器通道
選擇要配置的 PIT 實例,我們選用 PIT_0
如果需要啟用 Debug 模式下暫停的功能,那么 “PitFreezeEnable” 項使能
選擇對應的定時器通道,我們選用通道 0
如果需要 64-bit 定時器的話,啟用 “ChainMode”,本文示例沒有用到
“PitNotification” 設置該通道發生超時中斷時調用的回調函數
選擇 “PitChannelMode” 連續模式或者單次模式,兩種模式都可以,如果選擇單次模式,每次發生超時中斷時會自動關閉 PIT 通道,再次使用時需重新啟用該通道
選擇 “GptHwConfiguration” 選項卡,使能 PIT_0_CH_0 通道和中斷


在 IntCtrl_Ip 組件中添加 PIT 的中斷服務程序。
如果此處沒有配置,則必須在程序初始化時安裝 PIT 中斷處理函數。

更新源代碼,將會生成以下頭文件和源文件
Pit_Ip_BOARD_InitPeripherals_PBcfg.h
Pit_Ip_Cfg.h
Pit_Cfg_Defines.h
Pit_Ip_BOARD_InitPeripherals_PBcfg.c

下列驅動層文件也會自動添加到工程中
RTD/src/Pit_Ip .c
RTD/include/Pit_Ip.h
RTD/include/Pit_Ip_Types.h
3. 延時函數實現
在文件上方增加 “Pit_Ip.h” 和 “IntCtrl_Ip.h” 頭文件。
添加 PIT_0 實例的宏定義,方便函數調用。

main 函數中添加 PIT 和 Interrupt 初始化語句,一定要最先初始化時鐘,再是其他外設。這里也配置了一路 GPIO 用于控制開發板上的 LED,演示延時效果。

創建 PIT0_CH0 對應的回調函數,中斷事件發生時可以在此處分配任務。這里的函數名要與 “PitNotification” 配置中的名稱保持一致。

完成上述的操作之后,PIT 定時器還沒有啟動。為了精確的使用延時函數,我們需要查看當前工程中 PIT 的時鐘源 AIPS_SLOW_CLK 頻率,可以打開圖形化配置界面在時鐘樹中找到,也可以在 “Clock_Ip_Cfg.c” 源文件中查看。


創建一個毫秒延時函數,為了降低庫函數運行延遲,我們直接把命令寫入寄存器。
如下圖所示,將預裝載值寫入 LDVAL,TCTRL的 TEN 置位開啟定時器,此時定時器開始遞減計數,循環檢測 TFLG 寄存器,當超時中斷發生時 TIF 置位,關閉 PIT 定時器通道并清除掛起的中斷,完成一次延時操作。
我們工程中的 PIT0_CLK 是 30MHz,所以預裝載值:
count_timer = ( 30000000/1000) * delayMs = 30000 * delayMs

完成上述代碼的編寫之后,就可以在應用程序中使用了。
4. 參考文檔
[1] S32K3xx Reference Manual, Rev. 9, 07/2024, NXP
歡迎關注大大通博主:汽車大牛
了解更多汽車相關應用知識!
-
led
+關注
關注
242文章
23602瀏覽量
668762 -
NXP
+關注
關注
61文章
1318瀏覽量
186704 -
定時器
+關注
關注
23文章
3271瀏覽量
116602 -
PIT
+關注
關注
0文章
15瀏覽量
8311 -
s32k
+關注
關注
1文章
15瀏覽量
9881
發布評論請先 登錄
相關推薦
恩智浦推出用于汽車微控制器單元——S32K3系列
s32k3每次運行到Mcu_DistributePllClock報錯怎么解決?
s32k3的MBDT需要autosar?
如何檢查S32K3上的Lpspi+eDMA/PIT/CAN/EEPROM掛起的中斷?
關于S32K汽車通用MCU,NXP工程師總結的10個超實用Tips

【s32k】s32k14x系列(1)——開發環境搭建

S32K3 RTD的PIT定時器
S32K3的周期性中斷定時器介紹
【S32K 進階之旅】從零開始搭建 S32K 開發環境

S32K3可以直連AWS云服務啦!

評論