2020/2/7TongjiUniversity1系统初始化与CGM编程(教材5.2.3)(实验教材2.5.3、3.5)2020/2/7TongjiUniversity21系统初始化设置1.1CONFIG寄存器包括CONFIG2和CONFIG1两个寄存器,地址分别为$001E和$001F。每次复位后,CONFIG寄存器的所有位均被清零,而且CONFIG寄存器每次复位以后只能写一次。2020/2/7TongjiUniversity3CONFIG寄存器主要功能:STOP模式的恢复时间(32个或4096个CGMXCLK时钟周期)看门狗定时器溢出时间(218~24或者213~24个CGMXCLK时钟周期)STOP指令的允许与禁止计算机操作正常模块(即COP——看门狗模块)的允许与禁止低电压禁止模块LVI的控制和电压跳变点的选择允许和禁止STOP模式下的振荡器2020/2/7TongjiUniversity4(1)CONFIG2寄存器2020/2/7TongjiUniversity5(2)CONFIG1寄存器2020/2/7TongjiUniversity62.CGM编程2.1锁相环PLL的基本概念(1)锁相技术与频率合成技术利用一个或几个具有高稳定度和高精度的频率源,通过对他们进行加减(混频)、乘(倍频)、除(分频)运算,产生需要的具有相同频率稳定度和频率精度的频率信号。2020/2/7TongjiUniversity7•直接频率合成技术频率稳定度高、转换时间短、能做到很小的频率间隔体积大、成本高、安装调试复杂•间接频率合成技术体积小、成本低、安装调试简单性能上逐渐接近直接频率合成器2020/2/7TongjiUniversity8(2)锁相环频率合成器的基本原理锁相环是一个负反馈环路,它由基准频率源、鉴相器、低通滤波器、压控振荡器和分频器等部分组成。锁相环频率合成器的原理框图2020/2/7TongjiUniversity9工作原理:基准频率源提供一个稳定频率源,是锁相环的输入信号;鉴相器检测误差,其输出Ud大小取决于两个输入信号的相位差;低通滤波器把Ud的高频部分滤掉;压控振荡器根据控制电压Uo的大小输出相应的频率fo;分频(倍频)器为环路提供负反馈,于是可以得到非常精确的频率控制。2020/2/7TongjiUniversity102.2CGM的结构框图1.CGM模块的结构框图(1)晶振振荡电路产生时钟信号CGMXCLK1)送往SIM和A/D转换器2)经缓冲、预分频器,再送往PLL电路时钟3)送至时钟选择模块(2)锁相环频率合成器产生可由软件编程控制的CGMVCLK信号,输出到时钟选择电路(3)时钟选择电路输出CGMOUT2020/2/7TongjiUniversity11GP32时钟发生模块结构框图2020/2/7TongjiUniversity12GP32时钟发生模块结构框图2020/2/7TongjiUniversity132.CGM的外部连接及I/O信号(1)CGM的外部连接2020/2/7TongjiUniversity14•在典型应用情况下,CGM模块需要9个外接器件,其中晶振电路需要5个,PLL电路需要2到4个。•特别注意的是,时钟部分会对其他电路造成干扰,在电路板布线时应该将时钟电路的外接器件都用地线围绕起来,如果电路板空间允许,晶振应该采用卧式安装,将外壳焊接在地线上,最大限度减小对外的电磁干扰。2020/2/7TongjiUniversity15(2)CGM的I/O信号晶体振荡输入引脚(OSC1)晶体振荡输入引脚(OSC2)外部滤波电容器引脚(CGMXFC)PLL电路电源引脚(VDDA、VSSA)振荡器允许信号(SIMOSCEN)振荡器停止模式允许位(OSCSTOPENB)晶体输出频率信号(CGMXCLK)CGM的输出(CGMOUT)2020/2/7TongjiUniversity162.3CGM的编程基础1.CGM的寄存器(6个)PLL控制寄存器(PCTL,$0036)PLL带宽控制寄存器(PBWC,$0037)PLL倍频因子寄存器高位(PMSH,$0038)PLL倍频因子寄存器低位(PMSL,$0039)PLLVCO范围选择寄存器(PMRS,$003A)PLL参考分频因子寄存器(PMDS,$003B)2020/2/7TongjiUniversity17(1)PLL控制寄存器(PCTL,$0036)•PLLIE:PLL中断允许,决定当LOCK标志位翻转时是否产生CPU中断。•PLLF:PLL中断标志,只读。当LOCK标志翻转时被置位。•PLLON:PLL开关检测位,为“1”时PLL激活,否则关闭。2020/2/7TongjiUniversity18•BCS:CGM基时钟选择位,BCS=1时选择PLL电路为时钟源(VCO÷2),BCS=0时选择晶振分频为时钟源(外接时钟÷2)。•PRE1~PRE0:预分频位,参数如下所示:•VPR1~VPR0:VCO的E选择位,参数如下所示:2020/2/7TongjiUniversity19(2)PLL带宽控制寄存器(PBWC,$0037)•AUTO:自动带宽控制位,为1时表示自动方式,为0时为手动方式。•LOCK:锁相指示位。当AUTO=1(设为自动方式)时,LOCK只读。LOCK=1表示VCO输出频率已经稳定可靠,否则LOCK=0表示VCO输出频率尚未稳定。而若AUTO=0时,LOCK始终为0,无意义。•ACQ:获取模式位。1表示跟踪模式,0表示获取模式。2020/2/7TongjiUniversity20(3)PLL倍频选择寄存器(PMSH、$0038,PMSL、$0039)2020/2/7TongjiUniversity21PMSH的低四位与PMSL共同组成12位的分频因子,它们决定了VCO电路反馈模块的分频因子N的高4位。由于分频因子N不能为0,所以复位时N=64(即PMSH:PMSL=$0040)。注意:倍频因子寄存器有内部保护机制,当PLLON=1时,PMSH:PMSL不能被写入。2020/2/7TongjiUniversity22(4)PLLVCO范围选择寄存器(PMRS,$003A)•确定VCO输出频率范围系数L,复位时L=64(PMRS=$40)。注意:对PMRS的写操作只能在PLL关闭时进行。2020/2/7TongjiUniversity23(5)PLL参考分频因子寄存器(PMDS,$003B)•设置参考分频因子R注意:对PMDS的写操作也只能在PLL关闭时进行。2020/2/7TongjiUniversity242.PLL编程方法(1)参数选择根据实际系统的要求确定内部总线工作fBUS,计算有关参数:2020/2/7TongjiUniversity25PLL典型编程参数例,外接时钟fosc=32.768kHz,要求PLL输出fBUS=8MHz。查表得到如下数据:R=1,N=3D1,P=0,E=2,L=D0。2020/2/7TongjiUniversity26(2)PLL编程步骤禁止PLL:0-PTCL选择自动控制方式:$80-PBWC将E、P写入PTCL将N写入PMSH、PMSL将L写入PVSR将R写入PRDS置1ACQ,选择跟踪方式置1PLLON,等待锁定(LOCK=1)选择CGMVCLK/2作为CGMOUT(1-BCS)2020/2/7TongjiUniversity27(3)PLL编程举例(fosc=32.768kHz,fBUS=8MHz)PCTLEQU$0036PBWCEQU$0037PMSHEQU$0038PMSLEQU$0039PVRSEQU$003APRDSEQU$003BMOV#$00,PCTL;P=0,PLLON=0,关闭PLLMOV#$80,PBWC;设置PBWA为自动方式MOV#$03,PMSH;设置N=3D1MOV#$D1,PMSLMOV#D0,PVRS;设置LMOV#22,PCTL;设置E,打开PLLONBSET4,PCTL;选PLL为CGM基时钟源2020/2/7TongjiUniversity283系统初始化与CGM编程实例;------系统初始化-------;初始化CONFIG2MOV#%00000001,$001E;OSCSTOPENB=0,在STOP模式下禁止振荡器工作;SCIBDSRC=1,内部总线时钟用作SCI的时钟;初始化CONFIG1MOV#%00111101,$001F;COPRS=0,COP溢出范围在218~24个CGMXCLK个时钟周期;LVISTOP=0,在STOP模式下禁止LVI;LVIRSTD=1,允许LVI复位信号;LVIPWRD=1,禁止LVI模块的电源2020/2/7TongjiUniversity29;LVI5OR3=1,LVI工作在5V;SSREC=1,经过32个CGMXCLK周期退出STOP模式;STOP=0,STOP指令为非法指令;COPD=1,禁止COP模块;------PLL初始化-------;外部晶振为32.768KHz,内部总线频率编程为2.4576MHzMOV#$01,$0036;E=1MOV#$01,$0038;N=$012CMOV#$2C,$0039MOV#$80,$003A;L=$80BSET5,$0036;打开PLLBSET7,$0037;自动带宽模式BSET4,$0036;选PLL为CGM基时钟源2020/2/7TongjiUniversity30voidclock_init(void)//时钟初始化{PCTL=0x01;//在外部时钟为32.768k晶振时PMSH=0x01;//设置内部总线频率2.4576MHzPMSL=0x2C;PMRS=0x80;PCTL|=0X20;PBWC|=0x80;PCTL|=0x10;}voidinit_devices(void)//MCU初始化子程序{CONFIG2=0x01;//内部总线时钟用作SCI时钟CONFIG1=0x3D;clock_init();//时钟设置}