Chapter 1? CCM 的應(yīng)用範(fàn)圍Chapter 1? CCM 的應(yīng)用範(fàn)圍
在 Reference Manual 的 Table 5-2. System Clocks and Gating 列出每一個 Module 會使用到的時鐘源,透過 CCM 應(yīng)用來控制或調(diào)整 Module工作頻率,例如 GPIO 模組,本文章最後會實作一個簡單的 CCM 應(yīng)用,將 GPIO_IO15 Pin 腳輸出特定頻率 37.125 MHz。
Chapter 2? CCM 的方塊圖
CCM 是管理一顆晶片的 Clock 模組,然後透過設(shè)定乘法器 & 除法器 & Gate 產(chǎn)生晶片內(nèi)部匯流排和周邊模組所需的 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 找到對應(yīng)的控制暫存器,請參考下圖。
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 (圖二) 來直觀的了解架構(gòu)和關(guān)係。
圖一
圖二
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 控制開關(guān)。
配合 I2C 章節(jié) Table 16-1. 的描述,Module Clock 的兩組 Clock Name 的意思和用途。
Chapter 4? Programming Guide?
CCM 每一個 Register 是透過 Set、Clear、Toggle處理 Base Address 內(nèi)部的值,因為 Base Address 內(nèi)部的值是唯讀。
例如下圖要控制紅色框內(nèi) CCM_PLL_CTRL12 的值,必需透過藍(lán)色框內(nèi)的 Register 來設(shè)定。
這些 Set、Clear、Toggle 的暫存器和 Base Addresss 的關(guān)係如下:
Base Addr : 3038 08C0
Set ---> Base Addr + 0x04
在 Reference Manual 的 Table 5-2. System Clocks and Gating 列出每一個 Module 會使用到的時鐘源,透過 CCM 應(yīng)用來控制或調(diào)整 Module工作頻率,例如 GPIO 模組,本文章最後會實作一個簡單的 CCM 應(yīng)用,將 GPIO_IO15 Pin 腳輸出特定頻率 37.125 MHz。
Chapter 2? CCM 的方塊圖
CCM 是管理一顆晶片的 Clock 模組,然後透過設(shè)定乘法器 & 除法器 & Gate 產(chǎn)生晶片內(nèi)部匯流排和周邊模組所需的 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 找到對應(yīng)的控制暫存器,請參考下圖。
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 (圖二) 來直觀的了解架構(gòu)和關(guān)係。
圖一
圖二
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 控制開關(guān)。
配合 I2C 章節(jié) Table 16-1. 的描述,Module Clock 的兩組 Clock Name 的意思和用途。
Chapter 4? Programming Guide?
CCM 每一個 Register 是透過 Set、Clear、Toggle處理 Base Address 內(nèi)部的值,因為 Base Address 內(nèi)部的值是唯讀。
例如下圖要控制紅色框內(nèi) CCM_PLL_CTRL12 的值,必需透過藍(lán)色框內(nèi)的 Register 來設(shè)定。
這些 Set、Clear、Toggle 的暫存器和 Base Addresss 的關(guān)係如下:
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. 確認(rèn) Register 狀態(tài):
(1) GPIO_IO15 Pin 腳功能切換到 CLKO2 模式
(2) CCM Register 狀態(tài)符合輸出設(shè)定
5. 輸出波型如下:
Chapter 6? 參考資料?
1. IMX8MDQLQRM.pdf (Rev1.0)
參考來源