MPC5777C S32DS SDK Clock Manager 設置與功能使用範例

1.  概述

1.1     功能描述

本範例將使用 S32DS PA SDK 對 MPC5777C 時脈進行設置,並可以透過 define 切換是否呼叫 Callback 函數對時脈進行檢查。

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_Clock_Manager.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 :
    ..\9.0\S32_SDK_for_Power_Architecture_BETA_2_9_0_Release_Notes
  • 網頁版的 User Manual :
    ..\S32_SDK_S32PA_BETA_2.9.0\doc\Start_here.html
  • PDF 版的 User Manual :
    ..\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     MPC5777C 時脈樹狀圖

MPC5777C 提供兩組 PLL 時脈源,其中 PLL1 有頻率微幅調變的功能,可以減少 MCU 時脈產生的 EMI 問題。PLL0 不帶調頻功能,可以提供時間精確性較要求的模組使用。


3.2     MPC5777C 各周邊使用的時脈

3.3     MPC5777C 時脈限制

Clock Name

Min (MHz)

Max (MHz) MPC5777C_264MHz

Max (MHz) MPC5777C_300MHz

PLL0 Input

8

44

44

PFD

8

20

20

PLL0_VCO

600

1250

1250

PLL0_PHI

4.762

200

240

PLL0_PHI1

38

78

78

PLL1_Input

38

78

78

PLL1_VCO

600

1250

1250

PLL1_PHI

4.762

240

300

CORE_CLK

0

264

300

eTPU_CLK

0

200

240

PLAT_CLK

0

132

150

FM_PER_CLK (PBRIDGEx_CLK)

0

132

150

PER_CLK

0

132

150

EBI

0

66

66

SDCLK

4

16

16

eQADC ADCLK

2

33

33

MII

0

25

25

RMII

0

50

50

LFAST

10

26

26

DSPI_CLK

0

100

100

PSI_RX_CLK

4

4

4

PSI_1US_CLK

1

1

1

LFAST VCO

0

480

480

LFAST_PLL

10

240

240

Notes :

  1. 部分外設的時脈在 Clock manager 無法設置,會由外設專屬的 SDK 元件分頻,如 eQADC 與通訊相關的外設。

 

4.  程式功能描述

4.1     功能概述

本範例程式將透過 SDK 元件設置 MPC5777C 時脈,並設置檢查時脈用的 Callback 函數。

4.2     程式流程圖

5.  SDK 設置說明

MPC5777C-DEVB使用的 MPC5777C 系列,SPC5777CDMMO3 支援的最高核心時脈為 264 MHz。故本範例將以核心時脈 264 MHz 為目標來設置所有時脈。

5.1     開啟 SDK 設置介面

在 Component 中 雙擊欲修改的元件,來開啟 Inspector 頁面。

Step 1 :

Step 2 :

  

5.2     SDK 設置

Processor Expert 可以產生多組設置,使用者可以使用 API 在各設置間切換。

  • 按鈕可以新增一組設置。
  • 按鈕可以刪除目前選擇的設置。

 

5.3     設置 Clock sources

MPC5777C-DEVB 上的時脈來源使用 40 MHz 振盪器,以 XOSC_CLK = 40000000 設置各分/倍頻器如下:

5.4     設置 System Clock

將各系統時中的時脈來源與分頻如下設置:

 

5.5     設置 Peripheral Clocks

MPC5777C 有部分的外設時脈需要在 Clock Manager 元件中設置來源與分頻,參考如下:

  • Sigma-Delta ADC 時脈設置不可超過 16 MHz,此處設置為385 MHz
  • 核心時脈 264 MHz 版本的 MPC5777C,eTPU 時脈上限為 200 MHz
  • LFAST PLL 時脈來源最高不可超過 26 MHz
  • MCAN 模組的時脈來源可選擇外部震盪器 XOSC 或內部外設時鐘 PER_CLK,此處捲則內部外設時鐘
  • PSI5 RX 時脈輸入需設置為 4 MHz
  • PSI5_1us 需設置為 1 MHz

5.6     設置 Callback 程式

Clock Manager 元件可以在初始化的前後呼叫使用者自訂的 Callback 函數,使用者可以在自定義函數中進行自檢或初始化前後的一些作業。Callback 函數必須回傳值 : STATUS_SUCCESS,初始化才會正確進行。

  • 按鈕可以新增一組 Callback 設置
  • 按鈕可以刪除目前選擇的設置。

5.6.1  增加 Callback 設置

選取 Callbacks 頁面

添加需要的設置數量

5.6.2  進行 Callback 設置

  • Configuration : 勾選 Configuration,使 Processor Expert 生成設置
  • Name of Callback configuration : 設置 Callback 函數呼叫的時機
  • Name of Callback function : 若有需求,可以修改生成的設置名稱
  • Type of the Static Callback : 若有需求,可以修改 Callback 函數的名稱

 


 

6.  API 函數介紹

6.1     CLOCK_SYS_Init(
clock_manager_user_config_t const **clockConfigsPtr,
uint8_t configsNumber,
clock_manager_callback_user_config_t **callbacksPtr,
uint8_t callbacksNumber)

6.1.1  功能描述

將 Processor Expert 設置完成的結構體矩陣載入 Clock manager 的設置結構體矩陣中。

6.1.2  函數原型

status_t CLOCK_SYS_Init(
clock_manager_user_config_t const **clockConfigsPtr,
uint8_t configsNumber,
clock_manager_callback_user_config_t **callbacksPtr,
uint8_t callbacksNumber);

6.1.3  參數

  • clock_manager_user_config_t const **clockConfigsPtr
    透過 Processor Expert 所生成時脈設置的結構體矩陣。
  • uint8_t configsNumber
    時脈設置結構體矩陣的大小,即設置的組數。
  • clock_manager_callback_user_config_t **callbacksPtr
    透過 Processor Expert 所生成 Callback 設置的結構體矩陣。
  • uint8_t callbacksNumber
    Callback 結構體矩陣的大小,即設置的組數。

6.1.4  返回值

若所有內部函數回傳STATUS_SUCCESS,回傳 STATUS_SUCCESS,否則回傳最後的回傳值。

6.1.5  示例

以下範例將 Processor Expert 生成的設置載入 Clock manager 的設置結構體,並將執行結果回傳至 status。

status_t = status;

CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT, g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);


 

6.2     CLOCK_SYS_UpdateConfiguration(
uint8_t targetConfigIndex,
clock_manager_policy_t policy)

6.2.1  功能描述

呼叫 Callback 函數並更改系統時脈配置。具體步驟:

  • 依序呼叫設置為時脈變更前的 Callback 函數
  • 若所有 Callback 函數回傳 STATUS_SUCCESS,更改系統時脈配置
  • 依序呼叫設置為時脈變更後的 Callback 函數
  • 回傳 Callback 函數的回傳值

6.2.2  函數原型

status_t CLOCK_SYS_UpdateConfiguration(
uint8_t targetConfigIndex,
clock_manager_policy_t policy);

6.2.3  參數

  • uint8_t targetConfigIndex
    位於時脈設置結構體矩陣中的設置目標。
  • clock_manager_policy_t policy
    設定是否不論 callback 函數回傳 STATUS_SUCCESS 與否,都要變更時脈設置。

6.2.4  返回值

若所有內部函數回傳STATUS_SUCCESS,回傳 STATUS_SUCCESS,否則回傳最後的回傳值。

6.2.5  示例

以下範例會在設置變更前後呼叫 callback 函數判別,若設置前判別 STATUS_SUCCESS則會將設置變更為 g_clockManConfigsArr[0],並將最後的執行結果回傳至 status。

status_t = status;

CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);


 

6.3     CLOCK_DRV_Init(clock_user_config_t const * config)

6.3.1  功能描述

僅將時脈設置為輸入的設置結構體。具體步驟:

  • 時脈設置 Reset
  • 設置 PLL 時脈源
  • 設置 SIU 選擇時脈與分頻器
  • 設置 CMU

6.3.2  函數原型

status_t CLOCK_DRV_Init(clock_user_config_t const * config);

6.3.3  參數

  • clock_manager_user_config_t const **clockConfigsPtr
    透過 Processor Expert 所生成時脈設置的結構體。

6.3.4  返回值

若所有內部函數回傳STATUS_SUCCESS,回傳 STATUS_SUCCESS,否則回傳最後的回傳值。

6.3.5  示例

以下範例將設置變更為 g_clockManConfigsArr[0],並將執行結果回傳至 status。

status_t = status;

CLOCK_DRV_Init(g_clockManConfigsArr[0]);


 

6.4     CLOCK_DRV_GetFreq(clock_names_t clockName, uint32_t *frequency)

6.4.1  功能描述

返回輸入對應的時脈設置值。

6.4.2  函數原型

status_t CLOCK_SYS_GetFreq(clock_names_t clockName, uint32_t *frequency);

6.4.3  參數

  • clock_names_t clockName
    函數要讀取的時鐘名稱。
  • uint32_t *frequency
    結果將儲存在 frequency 之中。

6.4.4  返回值

若所有內部函數回傳STATUS_SUCCESS,回傳 STATUS_SUCCESS,否則回傳最後的回傳值。

6.4.5  示例

以下範例將讀取的 PLL0_PH0 時脈儲存在 mpc5777c_PPL0_PHI0_CLK 中,並將執行結果回傳至 status。

status_t = status;

uint32_t mpc5777c_PPL0_PHI0_CLK;

status = CLOCK_DRV_GetFreq(PLL0_PHI0_CLK,&mpc5777c_ PPL0_PHI0_CLK);

7.  參考資料

技術文檔

類型標題檔案
軟件Software

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

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論