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 :
- 部分外設的時脈在 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. 參考資料
- 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
評論