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