外設需要工作也需要時鐘驅動,通過多路選擇器以及對應的寄存器配置初始化最適合的外設頻率可以讓外設更高頻的工作。
從上面截圖以及紅框中可以看到,外設時鐘根PERCLK_CLK_ROOT
與IPG_CLK_ROOT
為大多數常用的外設提供時鐘,初始化這兩個時鐘根需要先對AHB_CLK_ROOT
進行初始化
初始化AHB_CLK_ROOT
AHB_CLK_ROOT
的時鐘來源在CBCDR[PERIPH_CLK_SEL]
處有一個多路選擇器
從上面這個圖可以看出AHB_CLK_ROOT
最大支持的頻率是132MHz,如果在CBCDR[PERIPH_CLK_SEL]
這個多路選擇器這里選擇了上路,那它的時鐘來源最大的頻率是PLL3_480
,通過CBCDR[PERIPH_CLK2_RODF]
分頻后最大只能到120(此時分頻器的值是4,如果是3的話160則超過了最大值),因為AHB_CLK_ROOT
限制最大是132。因此CBCDR[PERIPH_CLK_SEL]
這個多路選擇器,選擇下路, 同時在CBCMR[PRE_PERIPH_CLK_SEL]
時選擇PLL2
的PFD2
時鐘源,它的時鐘頻率是396MHz,最終達到AHB_CLK_ROOT
時經過CBCDR[AHB_PODF]
分頻器處理剛好得到132MHz的頻率。
/// 配置外接設備的時鐘頻率
/// CBCMR[PRE_PERIPH_CLK_SEL]選擇PLL2->PFD2
/// 先將19-18兩個bit位清0
/// 再將19-18兩個bit位的數據寫成1,選擇PFD2
CCM->CBCMR &= ~(3 << 18);
CCM->CBCMR |= (1 << 18);
/// CBCDR[PERIPH_CLK_SEL]多路選擇器選擇下路
CCM->CBCDR &= ~(1 << 25);
/// 讀取第5個bit位(PERIPH_CLK_ SEL_BUSY),如果是1指示正忙于握手,如果是0表示握手完成
while ((CCM->CDHIPR >> 5) & 0x1);
/* 修改 AHB_PODF 位的時候需要先禁止 AHB_CLK_ROOT 的輸出,但是
* 我沒有找到關閉 AHB_CLK_ROOT 輸出的的寄存器,所以就沒法設置。
* 下面設置 AHB_PODF 的代碼僅供學習參考不能直接拿來使用!!
* 內部 boot rom 將 AHB_PODF 設置為了 3 分頻,即使我們不設置 AHB_PODF, * AHB_ROOT_CLK 也依舊等于 396/3=132Mhz。
*/
#if 0
/// 將CBCDR[AHB_PODF]的12-10三個bit位清0
CCM->CBCDR &= ~(7 << 10);
/// 將CBCDR[AHB_PODF]的值設置成3,即3分頻
CCM->CBCDR | (2 << 10);
/// 等待忙位檢測通過
while ((CCM->CDHIPR >> 1) & 0x1);
#endif
初始化IPG_CLK_ROOT
IPG_CLK_ROOT
的頻率最大值是66MHz,從AHB_CLK_ROOT
過來的頻率是132MHz,所以這里只需要將CBCDR[IPG_PODF]
分頻器的值設置成除2即可。
/// 將9-8兩個bit位的數據清0
CCM->CBCDR &= ~(3 << 8);
/// 設置成2分頻
CCM->CBCDR |= (1 << 8);
初始化PERCLK_CLK_ROOT
PERCLK_CLK_ROOT
的頻率最大值是66MHz,在CBCDR[IPG_PODF]
分頻器的作用下它的頻率已經是66MHz了,所以此時只需要將CSCMR1[PERCLK_CLK_SEL]
多路選擇器選擇到IPG_CLK_ROOT
,將PERCLK_PODF
分頻器的值設置成1分頻即可。
/// CSCMR1[PERCLK_CLK_SEL]選擇ipg clk root
CCM->CSCMR1 &= ~(1 << 6);
/// 將5-0 6個bit位清0,設置成1分頻,此時已經是1分頻了
CCM->CSCMR1 &= ~(0x3F << 0);
以上都初始化完成后IPG_CLK_ROOT
與PERCLK_CLK_ROOT
兩個時鐘根的頻率就工作在子66MHz,最大的發揮了SOC的性能,這兩個時鐘根也是大部分外設的時鐘源。
特別說明
修改 AHB_PODF 位的時候需要先禁止 AHB_CLK_ROOT 的輸出,但是
- 我沒有找到關閉 AHB_CLK_ROOT 輸出的的寄存器,所以就沒法設置。
- 下面設置 AHB_PODF 的代碼僅供學習參考不能直接拿來使用!!
- 內部 boot rom 將 AHB_PODF 設置為了 3 分頻,即使我們不設置 AHB_PODF, * AHB_ROOT_CLK 也依舊等于 396/3=132Mhz。# 外設時鐘根配置
-
時鐘
+關注
關注
10文章
1733瀏覽量
131451 -
外設
+關注
關注
0文章
40瀏覽量
11692 -
多路選擇器
+關注
關注
1文章
22瀏覽量
6524
發布評論請先 登錄
相關推薦
評論