MPC5777C S32DS SDK PIT 設置與功能使用

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.  參考資料

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★博文作者未開放評論功能