1. 概述
1.1 功能描述
本範例將使用 S32DS PA SDK 對 MPC5777C 中的定週期中斷 (Periodic Interrupt Timer , PIT ) 模組進行設置,使其輸出分別週期為 0.1s、1s、5s 的中斷程式,並在其中更改 LED 的狀態。
1.2 硬體工具
MPC5777C-DEVB 評估板
PEmicro Multilink Universal 燒錄器
1.3 軟體工具
S32 Design Studio IDE for Power Architecture , 版本 2017.R1 , Build id: 171018
S32 SDK PA , BETA 2.9.0
1.4 相關範例程式
..\MPC5777C_PIT.zip
2. SDK 說明與使用
2.1 概述
S32 SDK PA 可以在 S32 Design Studio IDE 開發環境中使用 Processor Expert 工具配置使用者需要的設置,並自動生成設置檔案,提供快速便捷的 Device 與 IP 設置方式。
2.1.1 SDK 版本說明
SDK 的版本分為以下三種,本範例使用 S32 SDK PA BETA 2.9.0:
- EAR : Early Assess Release,早期評估版,是 SDK 最先發布的版本,提供基本的SDK 功能,可以做為早期軟體評估使用。
- BETA : Beta 版是修復 EAR 版若干 Bug 後發布的 SDK 版本,相較於 EAR 版本,功能更加完善。
- RTM : Ready To Manufacture,最終量產版本,提供最完善的 API 接口及外設 IP 配置選項,修復
2.1.2 S32 Design Studio IDE 的使用方式
關於 S32 Design Studio 的使用方式,請參考文件 “ S32 Design Studio 使用教學 ”。
2.1.3 SDK 的取得與安裝方式
關於 SDK 的取得與安裝方式,請參考文件 “MPC57xxx IDE & Tools 下載與安裝教學 ”。
2.1.4 安裝後 SDK 相關檔案
S32 SDK 預設安裝路徑在 S32 Design Studio IDE 資料夾下,可以同時存在不同的版本。安裝後路徑如下:
C:\NXP\S32DS_Power_v2017.R1\S32DS
選取本範例使用的 BETA 2.9.0 版本進入後,可以找到 SDK 的使用文件
- Release Note :
C:\NXP\S32DS_Power_v2017.R1\S32DS\9.0\S32_SDK_for_Power_Architecture_BETA_2_9_0_Release_Notes - 網頁版的 User Manual :
C:\NXP\S32DS_Power_v2017.R1\S32DS\S32_SDK_S32PA_BETA_2.9.0\doc\Start_here.html - PDF 版的 User Manual :
C:\NXP\S32DS_Power_v2017.R1\S32DS\S32_SDK_S32PA_BETA_2.9.0\doc\S32SDK_MPC5777C_UserManual.pdf
2.2 啟用 Processor Expert 介面檢視
預設的工作站可能沒有開起 Processor Expert 介面。
要開啟介面,請在工作列中選擇 Processor Expert -> Show View
2.3 Component Library 頁面
上圖為 Component Library 頁面,內容如下 :
- Alphabetical : 依字母序排列的 SDK 元件列表
- Categories : 依分類顯示的 SDK 元件列表
- Processor : 當前專案可使用的處理器配置列表
2.4 Components 頁面
上圖為 Components 頁面,包含了目前已加入專案的設置與 SDK 元件。其中 :
- 右上角的 Reload Project 按鈕可以將儲存的設置重新載入 Processor Expert
- 右上角的 Generate Processor Expert Code 按鈕可以將當前的 SDK 設置輸出至 Project 中
- 元件或設置圖示,左下角處的綠色 “v”代表當前使用中的元件或配置。
- 元件或設置圖示,左下角處的黑色 “x”代表當前該元件或設置不被使用。
- 元件或設置圖示,左上角處的紅色 “x”代表目前的配置內容有錯誤需要修正。
- 元件或設置圖是左方的箭頭,單擊可以展開該元件一般使用的 API 選單。
滑鼠停留可以看到 API 所需的輸入參數
此處顯示的 API可以直接以滑鼠拖曳到程式當中,不須使用者定義的參數會自動填入,需使用者定義的參數會留白。
2.5 Component Inspector 頁面
Component Inspector 頁面顯示的是目前在 Components 頁面中選取的項目設置,內容會隨選取的項目不同而切換。上方圖例中,選擇的是命名為 clockMan1 的 Clock_Manager 元件。
- Properties 分頁顯示的是 SDK Component 的設置介面
- Methods 頁面顯示的是該元件一般狀況下使用的 API 列表
3. 原理
3.1 PIT 框圖
3.2 PIT 介紹
PIT 模組由一組四路可互相串聯或獨立運行的計數器,以及一個獨立的實時中斷計數器 ( Real Time Interrupt timer, RTI ) 組成。計數器可用於觸發中斷或其他周邊,其中 RTI 使用獨立的時脈,可以用於待機模式下的喚醒功能。
3.3 硬體功能描述
- MPC5777C-DEVB 上的 User LED
- 用於 LED Toggle 的 GPIO 腳位
- 硬體連接圖
- 實際連接圖
4. 程式功能描述
4.1 功能概述
本範例將使用 S32DS PA SDK 對 MPC5777C 中的 PIT 模組進行設置,使其輸出分別週期為 0.1s、1s、5s 的中斷程式,並在其中更改 LED 的狀態。
4.2 程式流程圖
5. SDK 設置說明
本範例程式使用三組一般計數器通道,其設置如下:
- 通道 0 設置為每1s 觸發一次。
- 通道 1 設置為每 1s 觸發一次。
- 通道 2 設置與通道 1 串聯,每 5 次觸發一次。
5.1 開啟 SDK 設置介面
在 Component 中雙擊欲修改的元件,來開啟 Inspector 頁面。
Step 1 :
Step 2 :
5.2 設置計數器時脈
設置 PIT 計數器時脈,需選擇所要使用的 Clock Manager 元件設置,一般計數器的時脈來源為 PER_CLK,而 RTI 計數器的時脈來源為 XOSC。
此處會與 Clock manager 中的設置連動。
5.3 設置 PIT 通道
- 點選 兩次,將通道設置新增為三組。
- 將 pit1_ChnConfig0 設置為 Channel 0,週期為 100000 Microsecond。
- 將 pit1_ChnConfig1 設置為 Channel 1,週期為 1000000 Microsecond。
- 將 pit1_ChnConfig2 設置為 Channel 2,週期為 4 Count unit,並將 Channel chain 勾選,使其串聯 Channel 1。
6. API 函數介紹
6.1 CLOCK_DRV_Init(clock_user_config_t const * config)
6.1.1 功能描述
僅將時脈設置為輸入的設置結構體。具體步驟:
- 時脈設置 Reset
- 設置 PLL 時脈源
- 設置 SIU 選擇時脈與分頻器
- 設置 CMU
6.1.2 函數原型
status_t CLOCK_DRV_Init(clock_user_config_t const * config);
6.1.3 參數
-
clock_manager_user_config_t const **clockConfigsPtr
透過 Processor Expert 所生成時脈設置的結構體。
6.1.4 返回值
若所有內部函數回傳STATUS_SUCCESS,回傳 STATUS_SUCCESS,否則回傳最後的回傳值。
6.1.5 示例
以下範例將設置變更為 g_clockManConfigsArr[0],並將執行結果回傳至 status。
status_t = status;
CLOCK_DRV_Init(g_clockManConfigsArr[0]);
6.2 PINS_DRV_Init(uint32_t pinCount, const pin_settings_config_t config[])
6.2.1 功能描述
設置輸出 Pads 至所選擇的功能。
6.2.2 函數原型
status_t PINS_DRV_Init(uint32_t pinCount, const pin_settings_config_t config[]);
6.2.3 參數
- uint32_t pinCount
被設置的 Pads 數量。 - const pin_settings_config_t config[]
Pads 設置內容儲存的矩陣。
6.2.4 返回值
若所有內部函數回傳STATUS_SUCCESS,回傳 STATUS_SUCCESS,否則回傳最後的回傳值。
6.2.5 示例
以下範例將 Pads 設置載入並初始化,並將執行結果回傳至 status。
status_t = status;
status = PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);
其中,NUM_OF_CONFIGURED_PINS 與 g_pin_mux_InitConfigArr 為 Processor Expert 自動生成的參數,只需將 API 由 Components 頁面拖曳至程式碼中便會自動加入。
6.3 INT_SYS_InstallHandler(IRQn_Type irqNumber,
const isr_t newHandler,
isr_t* const oldHandler)
6.3.1 功能描述
為給定的 IRQ 編號註冊對應的中斷處理程式,並可以將舊的程式指標留做復原使用。
6.3.2 函數原型
void INT_SYS_InstallHandler(IRQn_Type irqNumber,const isr_t newHandler,isr_t* const oldHandler);
6.3.3 參數
- IRQn_Type irqNumber
h 中給定的 IRQ 編號。 - const isr_t newHandler
新的 IRQ 程式名稱 - isr_t* const oldHandler
儲存舊的 IRQ 程式指標
6.3.4 返回值
無。
6.3.5 示例
以下範例將程式 PIT_CH1_IRQ() 註冊為 PIT 通道 0 的中斷處理程式。
void PIT_CH1_IRQ(void);
void PIT_CH1_IRQ(void){ }
int main (void)
{
INT_SYS_InstallHandler(PIT_RTI0_IRQn, PIT_CH1_IRQ, NULL);
}
6.4 INT_SYS_EnableIRQ(IRQn_Type irqNumber)
6.4.1 功能描述
啟用給定的 IQR 編號對應的中斷。
6.4.2 函數原型
void INT_SYS_EnableIRQ(IRQn_Type irqNumber);
6.4.3 參數
- IRQn_Type irqNumber
h 中給定的 IRQ 編號。
6.4.4 返回值
無。
6.4.5 示例
以下範例將啟用 PIT 通道 0 的中斷處理程式。本函數需要任何 PIT API 呼叫以前初始化。
INT_SYS_EnableIRQ(PIT_RTI0_IRQn);
6.5 PIT_DRV_Init( const uint32_t instance,
const pit_config_t * const config)
6.5.1 功能描述
初始化 PIT 模組的時脈,並設置 Debug 模式下的行為。
6.5.2 函數原型
void PIT_DRV_Init(const uint32_t instance,const pit_config_t * const config);
6.5.3 參數
- const uint32_t instance
PIT 模組的編號。 - const pit_config_t * const config
由 Processor 產生的 PIT 模組設置矩陣。
6.5.4 返回值
無。
6.5.5 示例
以下範例將初始化 PIT 模組。
PIT_DRV_Init(INST_PIT1, &pit1_InitConfig);
6.6 PIT_DRV_InitChannel(const uint32_t instance,
const pit_channel_config_t * const chnlConfig)
6.6.1 功能描述
初始化 PIT 通道設置。此 API 函數不會使計數器開始計數。
6.6.2 函數原型
status_t PIT_DRV_InitChannel(const uint32_t instance, const pit_channel_config_t * const chnlConfig);
6.6.3 參數
- const uint32_t instance
PIT 模組的編號。 - const pit_channel_config_t * const chnlConfig
由 Processor 產生的 PIT 通道設置。
6.6.4 返回值
無。
6.6.5 示例
以下範例將 Processor Expert 產生的通道設置 pit1_ChnConfig0 載入 PIT 模組之中,並將執行結果回傳至 status。
status_t = status;
status = PIT_DRV_InitChannel(INST_PIT1, &pit1_ChnConfig0);
6.7 PIT_DRV_StartChannel(const uint32_t instance,
const uint8_t channel)
6.7.1 功能描述
使指定的通道開始計數。
6.7.2 函數原型
void PIT_DRV_StartChannel(const uint32_t instance, const uint8_t channel);
6.7.3 參數
- const uint32_t instance
PIT 模組的編號。 - const uint8_t channel
要開始計數的通道編號。
6.7.4 返回值
無。
6.7.5 示例
以下範例將使pit1_ChnConfig0所設置的通道開始計數。
PIT_DRV_StartChannel(INST_PIT1,pit1_ChnConfig0.hwChannel);
7. 測試結果
若接線正確,LED 將以下方頻率閃爍:
- 綠色 LED (GPIO114) 以1s 為間隔閃爍。
- 紅色 LED (GPIO115) 以 1 s 為間隔閃爍。
- 藍色 LED (GPIO116) 以 5 s 為間隔閃爍。
8. 參考資料
- MPC5777C Reference Manual , Rev. 8.1
https://www.nxp.com/docs/en/reference-manual/MPC5777CRM.pdf - S32 PA SDK BETA 2.9.0 User Manual
file:///C:/NXP/S32DS_Power_v2017.R1/S32DS/S32_SDK_S32PA_BETA_2.9.0/doc/html_MPC5777C/index.html