MPC5744P-时钟模块
1.時鐘結構圖
圖1 片內時鐘結構圖2.時鐘分配
有三種方式可為5744提供時鐘源,分別為外部有源晶振、外部無源晶振和內部16MHz RC晶振。其中16MHz內部RC晶振一般作為PLL或外部晶振失效情況下的備用時鐘,系統復位后5744默認選擇16MHz內部RC晶振作為時鐘源。5744內含有PLL0和PLL1兩個PLL,PLL0輸出為PLL0_PHI、PLL0_PHI1,PLL1輸出為PLL1_PHI,其中PLL0_PHI1還可以作為PLL1的輸入時鐘。選擇的時鐘源經過PLL后可為系統和片內外設提供時鐘。系統和片內外設可利用對應AUX Clock Selector選擇不同的時鐘源,在選擇好時鐘源之后可根據對應的Divider分頻器來獲取不同頻率的時鐘。
3.頻率限制
5744對系統和片內外設時鐘做了限制,在設置時不應超過對應的時鐘限制值,各個模塊的最高時鐘頻率如下:
表1 系統和片內外設頻率限制表4.時鐘選擇和分頻因子
5744利用MC_CGM模塊對系統和片內外設進行時鐘源的選擇和分頻因子的設置,主要包含圖1中的各個AUX Clock Selector和Divider。
圖2 系統和外設時鐘時鐘源選擇和分頻控制模塊5.系統時鐘配置
1.Mode Entry Module(MC_ME)
5744可對各個模塊進行使能和失能以進行能耗管理,默認情況下一些模塊處于失能狀態,在使用該模塊時需要對其使能。5744通過Mode Entry Module(MC_ME)對各個片內外設模塊進行管理。MC_ME的模塊如下:
圖3 MC_ME模塊圖?5744一共有RESET、TEST、SAFE、DRUN、RUN0-3、HALT0、STOP0等運行模式,其中RESET_FUNC、SAFE、 DRUN、 RUN0、 RESET_DEST模式總是使能,若使用其他模式需要實時MC_ME_ME使能。各個模式可以互相轉換,可以通過MC_ME_MODEx_MC寄存器對外設有不同的設置。在系統時鐘設置時,我們應先選擇想要的運行模式,然后設置對應的MC_ME_MODEx_MC寄存起對外設配置,然后轉換到對應的運行模式。
2.PLL配置
由圖3 MC_ME模塊圖可知外部晶振XOSC、PLL0和PLL1由MC_ME控制,PLL0、PLL1的時鐘源選擇有MC_CGM控制,則PLL配置步驟如下:
1)選擇運行模式;
2)關閉XOSC、PLLs(配置MC_ME.MODEx_MC寄存器,MODEx為1中所選的運行模式)
3)配置分頻和倍頻因子(配置PLLDIG_PLL0DV、PLLDIG_PLL1DV寄存器);
4)利用MC_CGM模塊選擇時鐘源(配置MC_CGM.ACx_SC);
5)利用MC_ME使能對應模塊(XOSC、PLLs);
6)進行模式轉換。
3.PLL參數的計算
5744對PLL的輸入輸出頻率有所限制,PLL0的輸入頻率應為8~56MHz,輸出應為4.762~625MHz;PLL1的輸入頻率應為37.5~78.125MHz,輸出應為4.764~625MHz,此外還有一個重要限制為PLL內部Fvco的頻率范圍為600~1250MHz 。
PLL0的計算公式如下:
其中fpll0_ref為PLL0所選時鐘源的時鐘頻率,fpll0_phi,fpll0_phi1分別為PLL0輸出PHI和PHI1非頻率
PLL1的計算公式如下:
其中fpll1_ref為PLL1的輸入時鐘頻率,若不使能PLLDIG_PLL1FD寄存器,默認情況下不使能,則PLL1計算公式可簡化為
fpll1_VCO = fpll1_ref? × PLL1DV[MFD]
fpll1_phi =?? fpll1_ref? ×? PLL1DV[MFD] / ( 2 * PLL1DV[RFDPHI ] )
4.示例代碼
/******************************************** 函數名 CLOCK_Config_System_180mhz* 功能 配置系統時鐘為180mhz* 輸入參數 無* 返回值 無* 示例 CLOCK_Config_System_180mhz();//配置系統時鐘為180mhz********************************************/ static void CLOCK_Config_System_180mhz() {//PLL0設置MC_ME.RUN0_MC.R&=0xFFFFFF9F; //關閉PLL0,XOSC,需以字訪問//PLL0分頻倍頻因子配置//配置Fpll0_phi=Fref*MFD/(PREDIV*RFDPHI)=40*24/(2*4)=120Mhz//配置Fpll0_phi1=Fref*MFD/(PREDIV*RFDPHI*2)=40*24/(2*8)=60MhzPLLDIG.PLL0DV.B.MFD=24; PLLDIG.PLL0DV.B.PREDIV=2;PLLDIG.PLL0DV.B.RFDPHI=4; PLLDIG.PLL0DV.B.RFDPHI1=8; MC_CGM.AC3_SC.B.SELCTL=1; //選擇XOSC作為PLL0時鐘MC_ME.RUN0_MC.R|=0x00000020; //打開XOSC,需以字訪問MC_CGM.AC4_SC.B.SELCTL=3; //選擇PLL0_PHI1作為PLL1時鐘源MC_ME.RUN0_MC.R|=0x00000040; //打開PLL0,需以字訪問//模式轉換//選擇目標運行模式為RUN0,并設置KEY,該寄存器只能以字訪問MC_ME.MCTL.R = 0x40005AF0; //選擇目標運行模式為RUN0,并設置反轉KEY,該寄存器只能以字訪問 MC_ME.MCTL.R = 0x4000A50F; while(MC_ME.GS.B.S_MTRANS);while(MC_ME.GS.B.S_CURRENT_MODE!=4); //轉換到RUN0模式并等待模式轉換完成//PLL1設置MC_ME.RUN0_MC.R&=0xFFFFFF7F; //關閉PLL1/PLL1分頻倍頻因子設定//配置Fpll1_phi=Fref*MFD/(RFDPHI*2)=60*18/(2*3)=180MhzPLLDIG.PLL1DV.B.MFD=18; PLLDIG.PLL1DV.B.RFDPHI=3; //設置運行外設配置模式寄存器0,表示外設全模式運行,不同外設可選擇不同的配置寄存器//該寄存器有8個MC_ME.RUN_PC[0].R=0x000000FE; MC_ME.RUN0_MC.R|=0x00000080; //打開PLL1,需以字訪問MC_ME.RUN0_MC.R&=0xFFFFFFF0;MC_ME.RUN0_MC.R|=0x00000004; //選擇PLL1_PHI作為系統時鐘源,需以字訪問//模式轉換//選擇目標運行模式為RUN0,并設置KEY,該寄存器只能以字訪問MC_ME.MCTL.R = 0x40005AF0 ;//選擇目標運行模式為RUN0,并設置反轉KEY,該寄存器只能以字訪問MC_ME.MCTL.R = 0x4000A50F;while(MC_ME.GS.B.S_MTRANS);while(MC_ME.GS.B.S_CURRENT_MODE!=4); //轉換到RUN0模式并等待模式轉換完成//等待XOSC、PLL0、PLL1穩定while((!MC_ME.GS.B.S_XOSC)||(!MC_ME.GS.B.S_PLL0)||(!MC_ME.GS.B.S_PLL1)); }6.片內外設時鐘配置
在系統時鐘配置完成后,需要進行片內外設時鐘的配置,片內外設的時鐘結構如下圖:
由于大部分外設掛在外設橋上,所以通過配置外設橋即可。ADC模塊除了需要配置外設橋,還需要配置單獨ADC_CLK時鐘。
在系統時鐘配置完成的情況下,外設時鐘只需要通過選擇時鐘源,設置分配因子即可獲得所需頻率的時鐘,則配置步驟如下:
1)通過MC_CGM.ACx_DCx使能分頻因子并設置分頻因子數值。
2)通過MC_CGM.ACx_SCx_選擇所采用的時鐘源。
所需要的Aux Clock Selector和Aux Clock Divider可根據所配置的外設在圖1查得。
1.外設橋時鐘配置
由于外設橋時鐘源直接選為系統時鐘,故不需要進行時鐘源的選擇,直接對分頻寄存器進行操作即可,代碼如下:
*************************************** 函數名 CLOCK_Config_Peripheral_Bridge_45mhz* 功能 配置外設橋時鐘頻率為45mhz* 輸入參數 無* 返回值 無* 示例 CLOCK_Config_Peripheral_Bridge_45mhz();//配置外設橋頻率為45mhz*/ static void CLOCK_Config_Peripheral_Bridge_45mhz() {//該寄存器只能以字訪問,設置PA_CLK=PB_CLK=SYS_CLK/(3+1)=180mhz/4=45mhz//PB_CLK,PA_CLK頻率最高為45mhzMC_CGM.SC_DC0.R=0x80030000; }2.ADC_CLK的配置
ADC模塊除一般外設橋時鐘外,還需配置ADC_CLK時鐘,代碼如下:
/*************************************** 函數名 CLOCK_Config_ADC_60mhz* 功能 配置ADC模塊時鐘頻率為60mhz* 輸入參數 無* 返回值 無* 示例 CLOCK_Config_ADC_60mhz();//配置ADC模塊時鐘頻率為60mhz*/ static void CLOCK_Config_ADC_60mhz() {//使能DC0,DIV=1,CLK_ADC=CLK_PLL0_PHI/(1+1)=120Mhz/2=60mhzMC_CGM.AC0_DC2.R=0x80010000; MC_CGM.AC0_SC.B.SELCTL=2; //選擇PLL0 PHI作為時鐘源 }?
總結
以上是生活随笔為你收集整理的MPC5744P-时钟模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【liferay】6、关于liferay
- 下一篇: 影响 oracle 性能的常见事件