MC_CGM.AC3_SC.B.SELCTL = 0b1;
MC_CGM.AC4_SC.B.SELCTL = 0b01;
首先以上两条程序分别为pll0和PLL1分配时钟源(分为外部晶振和内部晶振16MHz)
PLLDIG.PLL0DV.B.RFDPHI1 = 8;
PLLDIG.PLL0DV.B.RFDPHI = 2;
PLLDIG.PLL0DV.B.PREDIV = 1;
PLLDIG.PLL0DV.B.MFD = 8;
fPLL0_PHI=fPLL0_refPLL0DV[MFD]/(PLL0DV[PREDIV]PLL0DV[RFDPHI])=40MHz8/(12)=160MHz
fPLL0_PHI1=fPLL0_refPLL0DV[MFD]/(PLL0DV[PREDIV]PLL0DV[RFDPHI1])=40MHz8/(18)=40MHz
分频求出PLL0_PHI和PLL0_PHI1的具体频率
PLLDIG.PLL1DV.B.RFDPHI = 2;
PLLDIG.PLL1DV.B.MFD = 16;
分频求出PLL1_PHI的频率
MC_ME.DRUN_MC.R = 0x001300F2; 进入模式并使能所有模块并且确定系统时钟【MVRON=1,FLAON=11,PLL1ON=1,PLL0ON=1,XOSCON=1,IRCON=1,SYSCLK=primary PLL(PLL0_PHI)】
MC_ME.MCTL.R = 0x30005AF0; // TARGET_MODE=DRUN,KEY=0x5AF0
MC_ME.MCTL.R = 0x3000A50F; // TARGET_MODE=DRUN,KEY=0xA50F
while(MC_ME.GS.B.S_MTRANS == 1); 等待模式转换完成
以下为配置外围时钟,时钟源是系统时钟
MC_CGM.SC_DC0.B.DIV = 3; // Freq = sysclk / (3+1) = 160MHz/4 = 40MHz
MC_CGM.SC_DC0.B.DE = 1;
MC_ME.RUN_PC[0].R = 0x00000000; // gate off clock for all RUN modes
MC_ME.RUN_PC[1].R = 0x000000FE; // config. peri clock for all RUN modes
以上两行程序为打开RUN模式下的外围时钟
MC_ME.PCTL79.B.RUN_CFG = 0x001; // FlexCAN 0: select peripheral config RUN_PC[1]
MC_ME.PCTL78.B.RUN_CFG = 0x001; // FlexCAN 1: select peripheral config RUN_PC[1]
MC_ME.PCTL77.B.RUN_CFG = 0x001; // FlexCAN 2: select peripheral config RUN_PC[1]
MC_ME.PCTL204.B.RUN_CFG = 0x001; // LINFlexD_0: select peripheral config RUN_PC[1]
MC_ME.PCTL91.B.RUN_CFG = 0x001; // LINFlexD_1: select peripheral config RUN_PC[1]
MC_ME.PCTL237.B.RUN_CFG = 0x001; // ADC_0: select peripheral config RUN_PC[1]
MC_ME.PCTL30.B.RUN_CFG = 0x001; // PIT_0: select peripheral config RUN_PC[1]
具体为每一个模块配置时钟使能都是外围时钟,这个寄存器只是单纯的使能模块时钟**ME_ME PCTL寄存器决定为外设模块选择具体什么时钟*
以上为部分理解
波特率时钟为系统时钟的一半(不知道对不对)*//本子上看到的不知道当初怎么记的