1.1. ME32F030R8T6的時鐘樹
時鐘是MCU運行的基礎,時鐘信號推動單片機內各個部分執行相應的指令。時鐘系統就是CPU的脈搏,決定cpu速率,像人的心跳一樣 只有有了心跳,人才能做其他的事情,而MCU有了時鐘,才能夠運行執行指令,才能夠做準確、穩定的進行一系列的操作 (例如:串口通信、PWM信號、ADC采樣等等),因此時鐘的重要性不言而喻。
ME32F030系列 具有非常靈活的時鐘控制系統。用戶可根據不同應用需求來配置時鐘,從而取得最高的性能及優化的能耗管理。下圖為 ME32F030R8T6 的時鐘系統概要圖:
從圖中可以看出,MCU的時鐘源有內部高速的IRC_OSC 和 低速的 WDT_OSC 時鐘可供選擇。
IRC_OSC:它屬于高速時鐘,可以由內部晶體振蕩器控制寄存器(IRCCTRL)配置為 40/48MHz的主頻, 缺省值是40MHz 頻率,由工廠出廠預設并由引導程序寫入。一般作為系統主時鐘的時鐘源。
WDT_OSC:它屬于低速時鐘,由看門狗振蕩器控制寄存器控制。振蕩器包含模擬和數字兩部分。振蕩器的模擬部分用于產生模擬時鐘(Fclkana)。在振蕩器數字部分,模擬時鐘(Fclkana)輸出一個32KHz 頻率時鐘。然后再被DIVSEL 控制的分頻器分頻輸出到 WDT_CLK,作為看門狗時鐘源。
看門狗振蕩器輸出頻率可用下列公式推算:
WDT_CLK = Fclkana/(4 ×DIVSEL) = 8K Hz ~ 250 Hz (標稱值)
1.2. ME32F030R8T6時鐘源的應用控制
介紹完系統的時鐘源,接下來說說時鐘源主要運用到了哪些方面。
ME32F030R8T6的外設非常多,但我們實際使用的時候只會用到有限的幾個外設,使用任何外設都需要時鐘才能啟動,但并不是所有的外設都需要系統時鐘那么高的頻率,為了兼容不同速度的設備,有些高速,有些低速,如果都用高速時鐘,勢必造成浪費。并且,同一個電路,時鐘越快功耗越快,同時抗電磁干擾能力也就越弱,所以較為復雜的MCU都是采用多時鐘源的方法來解決這些問題。
WDT_CLK:由看門狗振蕩器控制寄存器來選擇輸入時鐘,作為看門狗的工作時鐘。
MAIN_CLK:由MAINCLK_SEL選擇輸入時鐘源,上電默認選擇IRC_OSC_CLK作為時鐘源,也可以通過置位來選擇WDT_OSC_CLK。
SYSTEM_CLK:由MAINCLK通過AHB 接口時鐘分頻器寄存器(SYSAHBCLKDIV)分頻而來,默認不分頻。SYSTEM_CLK時鐘供內核、外設和存儲器使用。其中外設通過 AHB 接口時鐘控制寄存器(SYSAHBCLKCTRL)來控制外設的時鐘使能,上電默認外設的時鐘都是打開的。
UART:UART0/1有自己獨立的時鐘分頻器從MAIN_CLK分頻后取得UART時鐘。
CLK_OUT:MCU的內部晶振器(IRC_OSC_CLK)、看門狗振蕩器(WDT_OSC_CLK),主時鐘(MAIN_CLK),系統時鐘(SYSTEM_CLK)都可以通過CLK_OUT作為輸出時鐘。
使用前需要通過 CLKOUT 輸出時鐘源選擇寄存器 (CLKOUTCLKSEL)來確定想要輸出的時鐘源,再經過 CLKOUT 輸出時鐘分頻器寄存器 (CLKOUTDIV)分頻后輸出,該寄存器初始值默認為0,即不輸出時鐘。需要輸出的話,設置好分頻系數(1-255)便可以輸出了。
2、ME32F030R8T6的時鐘系統函數簡介
為了便于開發者快速上手,敏矽微電子為開發者提供了豐富的庫函數和開發例程。
借助于庫函數,可以不用像普通單片機那樣去配置繁多的寄存器,從而加快開發進程。
借助于例程中,可以更深入理解寄存器配置及功能實現。
本例中,我們就借助于敏矽微電子提供的例程來簡單介紹它的時鐘系統的跨函數。在sys.c文件中,包含了切換系統時鐘,配置時鐘主頻等函數,供開發者直接使用。
1.3. 主頻配置函數
①、配置IRC_CLK為40M主頻
voidSYS_IRCTrimto40M(void){volatileuint32_ti=0xFFFF;if(DIA->IRCTRIM!=0xFFFFFFFF) { SYSCON->IRCCTRL=DIA->IRCTRIM;while(i--==0); FMC->FLASH_RDCYC=1; SYSCON->SYSAHBCLKDIV=1; SystemCoreClockUpdate(); }return; }
②、配置IRC_CLK為48M主頻
voidSYS_IRCTrimto48M(void){volatileuint32_ti=0xFFFF;if(DIA->IRCTRIM48!=0xFFFFFFFF) { SYSCON->IRCCTRL=DIA->IRCTRIM48;while(i--==0); FMC->FLASH_RDCYC=1; SYSCON->SYSAHBCLKDIV=1;//coreclockto48M SystemCoreClockUpdate(); } return; }
1.4. 時鐘源選擇函數
③、選擇MAIN_CLK的時鐘源,可以選擇IRC_CLK 或者 WATCHDOG_CLK。
voidSYS_SelectMainClkSrc(uint8_tsrc) { //switchmainclksource SYSCON->MAINCLKUEN_b.ENA=1;//disablemainclkupdate //switchmainclksourcetoSpecifyedsource if(src==IRC_CLK) SYSCON->MAINCLKSEL_b.SEL=0;elseif(src==WATCHDOG_CLK) SYSCON->MAINCLKSEL_b.SEL=2; SYSCON->MAINCLKUEN_b.ENA=0;//enablemainclkupdate SystemCoreClockUpdate(); return; }
④、設置AHB 接口時鐘分頻器的分頻系數,在這里請注意,函數如果檢查到當前時鐘為IR_CLK且分頻系數小于2,這樣系統時鐘SYSTEM_CLK的主頻肯定大于30M, 而FLASH的擦寫速度最高支持到30MHz。此時CPU時鐘超過Flash的最大讀取速度,這就需要插入延遲時鐘,延遲時鐘由 RDCYC 寄存器控制。
voidSYS_SetAHBClkDivider(uint8_tdiv) { //setupflashaccessspeedifSystemCoreClockisgoingtomorethan30MHz if((SYSCON->MAINCLKSEL_b.SEL==0) (div<2))?? ?FMC->FLASH_RDCYC=1; SYSCON->SYSAHBCLKDIV_b.DIV=div;//setupahbclockdivider SystemCoreClockUpdate();//updateMainClockandSystemCoreClock return; }
//⑤、設置WDT_CLK的時鐘源,可以選擇IRC_CLK 或者 WATCHDOG_CLK。
voidSYS_SelectWDTClkSrc(uint8_tsrc){if(src==IRC_CLK) SYSCON->WDTOSCCTRL_b.WDTCLKSRC=0; elseif(src==WATCHDOG_CLK) SYSCON->WDTOSCCTRL_b.WDTCLKSRC=1; return; }
//⑥、設置CLK_OUT的時鐘源,可以選擇IRC_CLK 、SYS_CLK、 WATCHDOG_CLK、MAIN_CLK中的一個。
voidSYS_SelectClkOutSrc(uint8_tsrc) {switch(src) { caseIRC_CLK: src=0;break;caseSYS_CLK: src=1;break;caseWATCHDOG_CLK: src=2;break;caseMAIN_CLK: src=3;break; default:return; } //switchclock SYSCON->CLKOUTUEN_b.ENA=1; SYSCON->CLKOUTCLKSEL_b.SEL=src;//selectclkoutsource SYSCON->CLKOUTUEN_b.ENA=0; return; }
//⑦、設置CLK_OUT時鐘的輸出分頻系數。
voidSYS_SetClkOutDivider(uint8_tdiv) { SYSCON->CLKOUTDIV_b.DIV=div; return;}
3、ME32F030R8T6時鐘系統例程
上面介紹了sys.c中關于系統時鐘的部分函數,下面我們來編寫一個關于時鐘配置的例程。使大家能夠對時鐘配置有一個簡單的了解。
本例實現的功能是:將AHB 接口時鐘進行2分頻,IRC時鐘切換到48M主頻,最后將系統時鐘進行分頻輸出。
intmain(void) { SYS_SetAHBClkDivider(2);//AHB接口時鐘進行2分頻 SYS_IRCTrimto48M();//IRC時鐘切換到48M主頻 SYS_SelectClkOutSrc(SYS_CLK);//選擇SYS_CLK作為OUT_CLK輸出時鐘 SYS_SetClkOutDivider(10);//對OUT_CLK時鐘進行10分頻 SYS_EnableClkOut();//使能OUT_CLK輸出端口 }
來源:敏矽MCU
-
mcu
+關注
關注
146文章
17358瀏覽量
352800 -
adc
+關注
關注
99文章
6537瀏覽量
545882 -
Cortex-M0
+關注
關注
4文章
124瀏覽量
38831 -
時鐘樹
+關注
關注
0文章
55瀏覽量
10823 -
時鐘系統
+關注
關注
1文章
101瀏覽量
11810
發布評論請先 登錄
相關推薦
TinyM0配套教程 LPC1100系列Cortex-M0最
MCU學習筆記_ARM Cortex M0_簡介
![MCU<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>_ARM <b class='flag-5'>Cortex</b> <b class='flag-5'>M0</b>_簡介](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論