英飞凌XC2336B 单片机外部与内部时钟源的切换——基于DAVE2.1 平台
2015-11-28胡瑞忠
胡瑞忠
(山西省电子工业科学研究所,山西 太原 030006)
DAVE——数字应用工程师,出自Infineon 科技。它能帮我们准确而快速地进行基于Infineon8 位、16 位或32 位单片机的嵌入式系统设计。由于Infineon 的嵌入式控制器的寄存器的数量非常大,大约有一千多个。所以对大量寄存器的初始化是一件相当棘手的事,而有了DAVE 的平台就能很轻松地完成这些事情。同时DAVE 还可完成单片机的其它初始化工作,与Keil 或、Tasking 等编译软件实现链接,轻松完成嵌入式系统的软件开发工作[1]。
XC2336B 是Infineon 的16 位微控制器XC2000 家族中的一员,它将功能和性能都得到扩展的C166SV2 内核、功能强大的片上外设子系统和各种片上存储器进行了完美结合。执行速度更快、稳定性更好、操作更简单。
1 XC2336B 单片机的时钟产生
XC2336B 单片机时钟产生单元(CGU)可非常灵活的产生单片机所需的时钟。通过锁相环(PLL),时钟产生单元(CGU)可将低频外部时钟转换为高频系统时钟,无需外部直接产生高频时钟。时钟产生单元(CGU)由时钟发生器和时钟控制单元(CCU)构成[4]。
图1 时钟产生单元的结构框图
XC2336B 单片机带有5 MHz 的内部时钟源,可以在无外部时钟信号的情况下产生系统时钟(fsys)。该内部时钟源位于锁相环(PLL)单元中,通过对该单元的合理设置,即可完成该单片机的无晶振工作。但由此产生的系统时钟(fsys)受温度影响很大,时钟的精度不高,适合在简单的应用中使用。因此,常用的产生系统时钟(fsys)的方法是,由高精度振荡器电路(OSC_HP)驱动一个外部晶振,产生的时钟信号送入锁相环(PLL)倍频后产生系统时钟(fsys)。振荡器电路包含一个反相放大器,以XTAL1 为输入、XTAL2 为输出。
在某些使用环境中,由于震动等原因,外部晶振有可能损坏。但是,在这种情况下,又不希望单片机处于死机状态,希望单片机能够发出一些报警信号,并能完成一些简单功能。那么,能否让单片机自动切换为内部时钟源工作呢?答案是肯定的。也就是要让单片机在正常状态下以高精度系统时钟运行,在外部晶振失效时以内部时钟源产生的系统时钟运行,而且这两个系统时钟的值是一样的。
要完成XC2336B 单片机外部与内部时钟源的切换,最主要的设置是对锁相环(PLL)的设置。因此我们先介绍一下XC2336B 单片机的锁相环(PLL)。
2 锁相环PLL 组成以及它的三种工作模式
1)PLL 由压控振荡器(VCO)和反馈通路组成。反馈通路上的分频器(N 分频)对VCO 频率分频,得到的结果和外部经P 分频处理的参考频率进行比较。相位检测电路根据这两个时钟信号的差值相应控制VCO 频率(fVCO)。PLL锁相检测单元监控并指示该状态。相位检测逻辑继续监控这两个时钟信号,如有需要则调整VCO 时钟。PLL 输出时钟fPLL由VCO 时钟经K2 分频产生、或由振荡器时钟经K1分频产生[3]。
2)正常模式下,参考频率fR经P 分频、N 倍频和K2 分频产生PLL 时钟[3]:
图2 PLL 正常模式框图
3)预分频模式下,参考频率fR经K1 分频产生PLL 时钟[3]:
4)未锁相模式下,PLL 以压控振荡器(VCO)基频fVCObase工作,fVCObase经K2 分频产生PLL 时钟[3]:
3 实现外部与内部时钟源切换的步骤
1)DAVE 中的有关系统时钟的设定
先设为使用8 MHz 的外部时钟源,最终的系统时钟频率fsys=80 MHz。系统时钟的输出管脚在调试完成后应该关闭,防止干扰产生。
图4 PLL 设定
2)在由DAVE 和Keil 生成的C 语言文件中找到MAIN_vChangeFreq()函数,它就是锁相环(PLL)的配置函数。通过对该函数的修改,就可以实现外部与内部时钟源的切换。
A、该函数初始的程序流程图如下:
图5 函数初始的程序流程图
在这种状态下,一旦外部晶振失效,CPU 将处于死机状态,无任何信号输出。
B、增加用户函数后,能够实现时钟源切换的函数MAIN_vChangeFreq()的流程图
图6 增加用户函数后的程序流程图
在这种状态下,一旦外部晶振失效,CPU 将执行用户函数,使CPU 能够利用5MHz 的内部时钟生成80 MHz 的系统时钟。
3)上个流程图中提到的用户函数代码如下:
函数说明:在外部时钟源失效的情况下,使fR 来自于内部时钟源,PLL 由上电基础模式(Fsys=10 MHz)或VCO 预分频模式换到VCO 正常模式,返回Error 值
4 结束语
通过对由DAVE 和Keil 生成的MAIN_vChangeFreq()函数的修改,实现了单片机在正常状态下以高精度系统时钟运行,在外部晶振失效时以内部时钟源产生的系统时钟运行的工作模式。
[1]程军.亿恒(西门子) C166 系列——16 位单片机原理与开发[M].北京:北京航空航天大学出版社,2001.
[2]谭浩强.C 程序设计[M].北京:清华大学出版社,1991.
[3]XC2300B Derivatives——16/32-Bit Single-Chip Microcontroller with 32-Bit Performance User’s Manual V1.2 2009-07[OL].www.infineon.com
[4]XE166N Derivatives——16-Bit Single-Chip Real Time Signal Controller Errata Sheet V1.4 2009-10[OL].www.infineon.com.