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

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

可用于引發(fā)中斷和觸發(fā)DMA通道
PIT 的每個(gè)通道都可獨(dú)立配置超時(shí)時(shí)限
如下圖所示,PIT 定時(shí)的時(shí)長(zhǎng)由預(yù)裝載值決定,所有通道都是遞減計(jì)數(shù)方式,當(dāng)計(jì)時(shí)器計(jì)數(shù)到0會(huì)觸發(fā)定時(shí)器中斷,自動(dòng)重裝載值并立刻進(jìn)入下一個(gè)周期。

2. PIT 驅(qū)動(dòng)配置
在 S32K3 工程的驅(qū)動(dòng)配置界面添加 PIT 組件

依次配置各個(gè)功能項(xiàng)
選擇 “GptChannelConfigSet” 選項(xiàng)卡
點(diǎn)擊“加號(hào)”按鈕添加定時(shí)器通道
選擇要配置的 PIT 實(shí)例,我們選用 PIT_0
如果需要啟用 Debug 模式下暫停的功能,那么 “PitFreezeEnable” 項(xiàng)使能
選擇對(duì)應(yīng)的定時(shí)器通道,我們選用通道 0
如果需要 64-bit 定時(shí)器的話,啟用 “ChainMode”,本文示例沒有用到
“PitNotification” 設(shè)置該通道發(fā)生超時(shí)中斷時(shí)調(diào)用的回調(diào)函數(shù)
選擇 “PitChannelMode” 連續(xù)模式或者單次模式,兩種模式都可以,如果選擇單次模式,每次發(fā)生超時(shí)中斷時(shí)會(huì)自動(dòng)關(guān)閉 PIT 通道,再次使用時(shí)需重新啟用該通道
選擇 “GptHwConfiguration” 選項(xiàng)卡,使能 PIT_0_CH_0 通道和中斷


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

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

下列驅(qū)動(dòng)層文件也會(huì)自動(dòng)添加到工程中
RTD/src/Pit_Ip .c
RTD/include/Pit_Ip.h
RTD/include/Pit_Ip_Types.h
3. 延時(shí)函數(shù)實(shí)現(xiàn)
在文件上方增加 “Pit_Ip.h” 和 “IntCtrl_Ip.h” 頭文件。
添加 PIT_0 實(shí)例的宏定義,方便函數(shù)調(diào)用。

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

創(chuàng)建 PIT0_CH0 對(duì)應(yīng)的回調(diào)函數(shù),中斷事件發(fā)生時(shí)可以在此處分配任務(wù)。這里的函數(shù)名要與 “PitNotification” 配置中的名稱保持一致。

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


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

完成上述代碼的編寫之后,就可以在應(yīng)用程序中使用了。
4. 參考文檔
[1] S32K3xx Reference Manual, Rev. 9, 07/2024, NXP
歡迎關(guān)注大大通博主:汽車大牛
了解更多汽車相關(guān)應(yīng)用知識(shí)!
-
led
+關(guān)注
關(guān)注
242文章
23800瀏覽量
672870 -
NXP
+關(guān)注
關(guān)注
61文章
1339瀏覽量
188111 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3298瀏覽量
117700 -
PIT
+關(guān)注
關(guān)注
0文章
15瀏覽量
8347 -
s32k
+關(guān)注
關(guān)注
1文章
15瀏覽量
9942
發(fā)布評(píng)論請(qǐng)先 登錄
恩智浦推出用于汽車微控制器單元——S32K3系列
s32k3每次運(yùn)行到Mcu_DistributePllClock報(bào)錯(cuò)怎么解決?
s32k3的MBDT需要autosar?
如何設(shè)置S32K3的調(diào)試密碼?
如何檢查S32K3上的Lpspi+eDMA/PIT/CAN/EEPROM掛起的中斷?
關(guān)于S32K汽車通用MCU,NXP工程師總結(jié)的10個(gè)超實(shí)用Tips

【s32k】s32k14x系列(1)——開發(fā)環(huán)境搭建

S32K3 RTD的PIT定時(shí)器
S32K3的周期性中斷定時(shí)器介紹
【S32K 進(jìn)階之旅】從零開始搭建 S32K 開發(fā)環(huán)境

【S32K 進(jìn)階之旅】Interrupt 模塊介紹與應(yīng)用

S32K3可以直連AWS云服務(wù)啦!

評(píng)論