基於RT1170 使能PIT定時功能 (七)

本文主要是透過遷移的思維,記錄本人初次使用NXP MCUXpresso SDK API進行BSP開發

MCUXpresso SDK PIT API 介面連結

在MCUXpresso SDK 框架下提供了對PIT進行操作的介面。週期性的定時器比較簡單,相對複雜的應用是組合定時器的使用。挑最簡單的方式學習,先“知其然”,再“知其所以然”。

1。 首先閱讀原理圖

設計中有一個輸出引腳,如下所示,可以透過PIT定時器,控制LED燈的顯示:

USER_KEY1——GPIO_AD_35——GPIO10_IO02

基於RT1170 使能PIT定時功能 (七)

基於RT1170 使能PIT定時功能 (七)

2。 SDK api 應用

2。1 引腳配置

LED引腳複用配置,GPIO輸出記得配置方向和初始輸出電平。 PIT不需要初始化相關的引腳。

基於RT1170 使能PIT定時功能 (七)

在這裡插入圖片描述

2。2 時鐘配置

基於RT1170 使能PIT定時功能 (七)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-ALDW12t8-1616058905035)(http://139。224。41。215:4999/server/。。/Public/Uploads/2021-03-11/6049b43794afd。png)]

從上圖可以看出PIT1的時鐘源從BUS_CLK_ROOT, PIT2的時鐘源從BUS_LPSR_CLK_ROOT獲取。

基於RT1170 使能PIT定時功能 (七)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-G5AmLZTM-1616058905038)(http://139。224。41。215:4999/server/。。/Public/Uploads/2021-03-11/6049b6c2574b5。png)]

在上圖序號1中輸入想要查詢的時鐘名稱,就可以得到其時鐘源的時鐘路徑。從上圖可以分析得到,外部的24Mhz時鐘透過倍頻得到480Mhz SYS_PLL3_CLK, BUS_CLK_ROOT是從SYS_PLL3_CLK二分頻得到的,並作為PIT的時鐘源。

2。3 外設配置

在外設配置裡,新建功能組BOARD_InitPeripheral_PIT1_Ch_0

基於RT1170 使能PIT定時功能 (七)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-QjAe2EGU-1616058905042)(http://139。224。41。215:4999/server/。。/Public/Uploads/2021-03-11/6049b92bb380b。png)]

然後按上圖序號操作,就可以進行PIT的驅動初始化配置介面。

基於RT1170 使能PIT定時功能 (七)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-ltLvrU4s-1616058905045)(http://139。224。41。215:4999/server/。。/Public/Uploads/2021-03-11/6049ba7d41cef。png)]

序號1:控制PIT1

序號2:DEBUG使能中斷

序號3:使用預設配置

序號4:選擇相應的時鐘源,由於父時鐘BUS_CLK_ROOT可選。

序號5:選擇PIT通道和設定中斷產生的週期。預設使用PIT1的通道0。

上述配置已滿足了對週期性定時器的設定,當然最關鍵的事情在於編寫中斷處理函式,以滿足應用的需求。

基於RT1170 使能PIT定時功能 (七)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-h97eaYMq-1616058905047)(http://139。224。41。215:4999/server/。。/Public/Uploads/2021-03-11/6049bcc6a7821。png)]

點選上圖

基於RT1170 使能PIT定時功能 (七)

;即可生成中斷函式模板,在當中新增相應的邏輯即可。如下所示:

/* PIT1_IRQn interrupt handler */void PIT1_IRQHANDLER(void) { /* Place your code here */ /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping exception return operation might vector to incorrect interrupt。 */ #if defined __CORTEX_M && (__CORTEX_M == 4U) __DSB(); #endif}

在中斷處理函式當中記得清楚中斷標誌位。

/* Place your code here */ /* Clear interrupt flag。*/ PIT_ClearStatusFlags(PIT1_PERIPHERAL, PIT1_CHANNEL_0, kPIT_TimerFlag);

2。4 驗證測試

將生成的程式碼替換driver_examples\pit\cm7相對應的程式碼,最終達到同樣的效果。目前程式碼沒有放出來供各位參考。

4。 總結

本次config tool工程已提交到https://gitee。com/yilianghong/mex。git 供參考。詳細修改見如下兩次提交。

+AHB-03 New feature support PIT1 channel 0 driver init

+AHB-02 New feature support GPIO_AD_35 Pin output setting