The on-chip oscillator circuit enables a crystal to be attached to the F281x and C281x devices using the X1/XCLKIN and X2 pins. If a crystal is not used, then an external oscillator can be directly connected to the X1/XCLKIN pin and the X2 pin is left unconnected. The logic-high level in this case should not exceed VDD. The PLLCR bits [3:0] set the clocking ratio.
The PLLCR bits[3:0] set the clocking ratio.通过PLLCR 的0:3位来设置比率。下面咱么就说说怎么设置。
DSP-F2812的时钟和系统控制
1振荡器OSC和锁相环PLL
DSP里面肯定有时钟,没有时钟DSP怎么工作?这个我从时钟怎么产生的开始解释,咱们了解了解是有好处的。首先两个概念,振荡器和锁相环。(振荡器:(oscillator):是一种能量转换装置——将直流电能转换为具有一定频率的交流电能。其构成的电路叫振荡电路.晶振),(锁相环:(phase Locked Loop):是一种信号处理设备-------简单的说就是能将信号同步,相位统一达到同步的效果!) 其实,原理就是,由振荡器产生信号,但是产生的信号不同步,所以用了个锁相环把信号的相位弄一致,这样频率一样,幅度一样,相位也一样就形成了同步的时钟信号。
看一看F2812里面是怎么设计的呢?
左边是振荡器,邮编是PLL,两个联合成为时钟的生成装置。看一看,未处理的时钟信号从振荡器出来,分成三个路线,第一个路线直接出去,第二个是PLLBypass,PLL旁路,第三个叫PLL。然后我们来研究一下这几个有啥作用。最后的CLKIN和从振荡器出来的XCLKIN有啥关系呢。我们通过XF_PLLDIS(下图)
第101引脚,看到了吧。设置时钟的关系,XF_PLLDIS引脚。如果这个引脚禁止,就是使能PLL模块,直接用的就是振荡器出来的时钟信号,也就是XF_PLLDIS = 0;。如果XF_PLLDIS为高电平,PLL被使能,则表示振荡器产生的时钟要经过PLL模块。但是上图1-1明明PLL引出了两个引脚是不?那么到底选哪个?是PLL旁路还是直接PLL。当然啦,肯定有方法,PLL的控制不光是这个一个,这个仅仅是个使能位置,而已。我们需要进一步的设置一个寄存器,PLLCR,控制寄存器来有效的改变是选用哪个方式。(下面是原版英文)
The PLLCR bits[3:0] set the clocking ratio.通过PLLCR 的0:3位来设置比率。下面咱么就说说怎么设置。
引入PLLCR寄存器:
举个比较简单的例子,SysCtrlRegs.PLLCR.all = 0x0001; 就是XCLKIN/2,从振荡器出来的信号,进行2比分,而且还是PLL模式,也就是如果晶振是30MHz的话,那么输出的时钟就是15Mhz。当写入0001的时候才是PLL旁路模式。
书中的话:实际使用的时候,通常使用第3种模式,即PLL使能。通常使用30MHz的晶振为F2812提供时基,因为当PLL控制寄存器PLLCR取最大值10的时候,送至CPU的时钟可以达到150MHz,也就是F2812所能支持的最高的时钟。(因此,**F2812的最大时钟频率是150Mhz)**
2. X2812**中的各种时钟信号的产生**
刚才咱们说的是时钟信号的产生,现在说说时钟信号怎么分发下去的。看着上面的图PLL和OSC的模块通过CLKIN引脚给F2812 CPU,然后通过F2812的CPU进行时钟分配,分配出来的就是SYSCLKOUT。出来之后,有个系统控制寄存器和外设寄存器来使能时钟,然后有的需要外设寄存器,有的需要低速预定标器,有的需要告诉预定标器进行相应的设置。(SCI,SPI,McBSP需要的是低速预定标器)EVA,EVB,ADC需要高速预定标器,(预定标器:DSP中一般需要把CPU的时钟频率降下来给外设用,就需要用到时钟预定标,将CPU的频率除以你自己所设的预定标系数,得到的就是你想要的时钟频率) 。也就是说,一个模块的时钟配置,通常需要设置三个部位,1. 系统控制寄存器 2. 外设寄存器 3. 预定标器
外设时钟控制寄存器PCLKCR,高低速预定标器寄存器HISPCP,LOSPCP。
举个例子:开启EVA,EVB和ADC的时钟
高速预定标器和低速预定标器相应给值,然后如果这个模块应用到高速或者低速时钟,它就自动的进行了。要弄清楚,SCI,SPI,McBSP是低速时钟,EVA,EVB,ADC是高速时钟。如果算的话,不按照时钟SYSCLKOUT算,按照高低速时钟进行算术。
3.**看门狗电路**
WatchDog是个神奇的东西,我学C51的时候就学过,如今DSP里面有,ARM里面也有。咱们就彻彻底底的明白,这个狗到底是干啥的。
上面是来自百度百科的资料。现在我们需要用大白话说明下啥是看门狗。看门狗就是个看家的狗,你要不喂它,它就咬你,让你复位。看门狗模块一个输入端一个输出端,模块的输入端接一个DSP的I/O,模块的输出端接DSP的复位。如果你的电路正常运行,就应该是隔一段时间进行一次“喂狗”,就是I/O进行输入个数,进一个数就给看门狗清零,如果要是你的程序遇到不测了,I/O口不再喂狗,那么当看门狗积累了一定的数,满足条件,触发了它的输出,就对DSP进行了置位。就是这个原理。
好了,弄清大体的原理了,我们就开始看看,F2812的看门狗怎么设计。还有没有什么先进的功能呢?
过多了也不再说了,说多了也没用。寄存器到时候查就行了。涉及这块的寄存器下面我给写出来:
4. 例程序
关于初始化PLL的时候为什么需要延时,我们在PDF中找到了答案:
最上面的时序图上面,Device Status看到E,F阶段了吗?PLL LOCK是需要时间的。中间过程乱七八糟各种状态,但是你看后面经过PLL锁的时间和什么唤醒时间之后XCLKOUT就开始趋于平稳了,正常工作了,所以我们不管中间过程什么状态,直接延时,延时,延时,就OK了,等他完成了,XCLKOUT平稳了输出了,咱们就开始进行正常运行。