您好,登錄后才能下訂單哦!
本篇內容介紹了“C語言中怎么設置時鐘”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
#define APLL_LOCK (*((volatile unsigned long *)0x7E00F000)) #define MPLL_LOCK (*((volatile unsigned long *)0x7E00F004)) #define EPLL_LOCK (*((volatile unsigned long *)0x7E00F008)) #define OTHERS (*((volatile unsigned long *)0x7e00f900)) #define CLK_DIV0 (*((volatile unsigned long *)0x7E00F020)) #define ARM_RATIO 0 /* ARMCLK = DOUTAPLL / (ARM_RATIO + 1) */ #define HCLKX2_RATIO 4 /* HCLKX2 = HCLKX2IN / (HCLKX2_RATIO + 1) = 100MHz */ #define HCLK_RATIO 0 /* HCLK = HCLKX2 / (HCLK_RATIO + 1) = 100MHz */ #define PCLK_RATIO 1 /* PCLK = HCLKX2 / (PCLK_RATIO + 1) = 50MHz */ #define MPLL_RATIO 0 /* DOUTMPLL = MOUTMPLL / (MPLL_RATIO + 1) */ #define APLL_CON (*((volatile unsigned long *)0x7E00F00C)) #define APLL_CON_VAL ((1<<31) | (250 << 16) | (3 << 8) | (1)) #define MPLL_CON (*((volatile unsigned long *)0x7E00F010)) #define MPLL_CON_VAL ((1<<31) | (250 << 16) | (3 << 8) | (1)) #define CLK_SRC (*((volatile unsigned long *)0x7E00F01C)) void clock_init(void) { /*將每一個 LOCK_TIME 設置為 0xffff*/ APLL_LOCK = 0xffff; MPLL_LOCK = 0xffff; EPLL_LOCK = 0xffff; /* set async mode 當CPU時鐘 != HCLK時,要設為異步模式 */ OTHERS &= ~0xc0; //將 OTHERS 的第六和第七位清零,以設置成異步模式。 while ((OTHERS & 0xf00) != 0); /*CLK_DIV是為外設進行分頻的寄存器,共三個.CLK_DIV0、CLK_DIV1、CLK_DIV2。對于設置內核時鐘和AHB、APB的總線時鐘來說,我們只需要了解CLK_DIV0的幾個位域即可。*/ CLK_DIV0 = (ARM_RATIO) | (MPLL_RATIO << 4) | (HCLK_RATIO << 8) | (HCLKX2_RATIO << 9) | (PCLK_RATIO << 12); APLL_CON = APLL_CON_VAL; /* 500MHz */ MPLL_CON = MPLL_CON_VAL; /* 500MHz */ CLK_SRC = 0x03;//打開時鐘源開關,讓進過LOCK_TIME后變得穩定后的時鐘源輸出。 }
注意:OTHERS寄存器中的syncmode和syncmuxsel這兩個位應該是協同工作的,一起置1或清0。syncmode要置1,就先向syncmuxsel位寫1;syncmode清0后,隨即再把syncmuxsel位也清0。
“C語言中怎么設置時鐘”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。