【ATU Book-i.MX8 系列】 i.MX8M Clock Control Module

關鍵字 :NXPi.MX8MQBSP
Chapter 1  CCM 的應用範圍Chapter 1  CCM 的應用範圍
在 Reference Manual 的 Table 5-2. System Clocks and Gating 列出每一個 Module 會使用到的時鐘源,透過 CCM 應用來控制或調整 Module工作頻率,例如 GPIO 模組,本文章最後會實作一個簡單的 CCM 應用,將 GPIO_IO15 Pin 腳輸出特定頻率 37.125 MHz。


Chapter 2  CCM 的方塊圖
CCM 是管理一顆晶片的 Clock 模組,然後透過設定乘法器 & 除法器 & Gate 產生晶片內部匯流排和周邊模組所需的 Clock 。


Chapter 3  重要表格
3.1 Clock Root Selects
Table 5-1 列出每一個 Clock Root 可以選擇的 CLK來源和最大的頻率限制,一般會有 8 個訊號來源,Clock Slice 的編號就是 CCM Memory Map查表時,CCM_TARGET_ROOT 旁邊的編號,再借由 Section/Page 找到對應的控制暫存器,請參考下圖。


3.2 Clock Tree
Clock Root 的 Source Select 選擇器所組成 Clock Tree,可以由 Reference Manual 的 Figure 5-2 CCM Input Clock Source (圖一) 和 Figure 5-3. CCM Clock Tree Root Slices (圖二) 來直觀的了解架構和關係。
圖一

圖二


3.3 System Clocks
Reference Manual 的 Table 5-2. System Clocks and Gating 列出每一個 Module 會使用到 Clock Root 和 Gating (閘門) ,以下圖為例,可以知道常用的 I2C 模組中的 I2C1 Clock Root 是 ccm_i2c1_clk_root,並且由 CCGR23 Gating 控制開關。


配合 I2C 章節 Table 16-1. 的描述,Module Clock 的兩組 Clock Name 的意思和用途。


Chapter 4  Programming Guide 
CCM 每一個 Register 是透過 Set、Clear、Toggle處理 Base Address 內部的值,因為 Base Address 內部的值是唯讀。

例如下圖要控制紅色框內 CCM_PLL_CTRL12 的值,必需透過藍色框內的 Register 來設定。


這些 Set、Clear、Toggle 的暫存器和 Base Addresss 的關係如下:
Base Addr : 3038 08C0
Set ---> Base Addr + 0x04

Clear ---> Base Addr + 0x08
Toggle ---> Base Addr + 0x0c

Chapter 5  實作 (i.MX8MQ EVK 驗證)
1. 由 CLKO2 Pin 腳輸出 Clock 頻率 37.125 MHz



2. 在 clk-imx8mq.c 檔案裡,IMX8MQ_VIDEO_PLL1 可以被 37.125 M 整除,所以決定作為 Clock 來源。
594000000 / 16 = 37125000 = 37.125 MHz
 tmp/work/imx8mqevk-poky-linux/linux-imx/4.14.98-r0/git/drivers/clk/imx/clk-imx8mq.c


3. Device Tree 如下修改:
tmp/work/imx8mqevk-poky-linux/linux-imx/4.14.98-r0/git/arch/arm64/boot/dts/freescale/fsl-imx8mq-evk.dts


4. 確認 Register 狀態:
(1) GPIO_IO15 Pin 腳功能切換到 CLKO2 模式



(2) CCM Register 狀態符合輸出設定






5. 輸出波型如下:


Chapter 6  參考資料 
1. IMX8MDQLQRM.pdf (Rev1.0)

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

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

參考來源