胡瑞忠
(山西省電子工業(yè)科學(xué)研究所,山西 太原 030006)
DAVE——數(shù)字應(yīng)用工程師,出自Infineon 科技。它能幫我們準(zhǔn)確而快速地進(jìn)行基于Infineon8 位、16 位或32 位單片機(jī)的嵌入式系統(tǒng)設(shè)計(jì)。由于Infineon 的嵌入式控制器的寄存器的數(shù)量非常大,大約有一千多個(gè)。所以對(duì)大量寄存器的初始化是一件相當(dāng)棘手的事,而有了DAVE 的平臺(tái)就能很輕松地完成這些事情。同時(shí)DAVE 還可完成單片機(jī)的其它初始化工作,與Keil 或、Tasking 等編譯軟件實(shí)現(xiàn)鏈接,輕松完成嵌入式系統(tǒng)的軟件開發(fā)工作[1]。
XC2336B 是Infineon 的16 位微控制器XC2000 家族中的一員,它將功能和性能都得到擴(kuò)展的C166SV2 內(nèi)核、功能強(qiáng)大的片上外設(shè)子系統(tǒng)和各種片上存儲(chǔ)器進(jìn)行了完美結(jié)合。執(zhí)行速度更快、穩(wěn)定性更好、操作更簡(jiǎn)單。
XC2336B 單片機(jī)時(shí)鐘產(chǎn)生單元(CGU)可非常靈活的產(chǎn)生單片機(jī)所需的時(shí)鐘。通過鎖相環(huán)(PLL),時(shí)鐘產(chǎn)生單元(CGU)可將低頻外部時(shí)鐘轉(zhuǎn)換為高頻系統(tǒng)時(shí)鐘,無需外部直接產(chǎn)生高頻時(shí)鐘。時(shí)鐘產(chǎn)生單元(CGU)由時(shí)鐘發(fā)生器和時(shí)鐘控制單元(CCU)構(gòu)成[4]。
圖1 時(shí)鐘產(chǎn)生單元的結(jié)構(gòu)框圖
XC2336B 單片機(jī)帶有5 MHz 的內(nèi)部時(shí)鐘源,可以在無外部時(shí)鐘信號(hào)的情況下產(chǎn)生系統(tǒng)時(shí)鐘(fsys)。該內(nèi)部時(shí)鐘源位于鎖相環(huán)(PLL)單元中,通過對(duì)該單元的合理設(shè)置,即可完成該單片機(jī)的無晶振工作。但由此產(chǎn)生的系統(tǒng)時(shí)鐘(fsys)受溫度影響很大,時(shí)鐘的精度不高,適合在簡(jiǎn)單的應(yīng)用中使用。因此,常用的產(chǎn)生系統(tǒng)時(shí)鐘(fsys)的方法是,由高精度振蕩器電路(OSC_HP)驅(qū)動(dòng)一個(gè)外部晶振,產(chǎn)生的時(shí)鐘信號(hào)送入鎖相環(huán)(PLL)倍頻后產(chǎn)生系統(tǒng)時(shí)鐘(fsys)。振蕩器電路包含一個(gè)反相放大器,以XTAL1 為輸入、XTAL2 為輸出。
在某些使用環(huán)境中,由于震動(dòng)等原因,外部晶振有可能損壞。但是,在這種情況下,又不希望單片機(jī)處于死機(jī)狀態(tài),希望單片機(jī)能夠發(fā)出一些報(bào)警信號(hào),并能完成一些簡(jiǎn)單功能。那么,能否讓單片機(jī)自動(dòng)切換為內(nèi)部時(shí)鐘源工作呢?答案是肯定的。也就是要讓單片機(jī)在正常狀態(tài)下以高精度系統(tǒng)時(shí)鐘運(yùn)行,在外部晶振失效時(shí)以內(nèi)部時(shí)鐘源產(chǎn)生的系統(tǒng)時(shí)鐘運(yùn)行,而且這兩個(gè)系統(tǒng)時(shí)鐘的值是一樣的。
要完成XC2336B 單片機(jī)外部與內(nèi)部時(shí)鐘源的切換,最主要的設(shè)置是對(duì)鎖相環(huán)(PLL)的設(shè)置。因此我們先介紹一下XC2336B 單片機(jī)的鎖相環(huán)(PLL)。
1)PLL 由壓控振蕩器(VCO)和反饋通路組成。反饋通路上的分頻器(N 分頻)對(duì)VCO 頻率分頻,得到的結(jié)果和外部經(jīng)P 分頻處理的參考頻率進(jìn)行比較。相位檢測(cè)電路根據(jù)這兩個(gè)時(shí)鐘信號(hào)的差值相應(yīng)控制VCO 頻率(fVCO)。PLL鎖相檢測(cè)單元監(jiān)控并指示該狀態(tài)。相位檢測(cè)邏輯繼續(xù)監(jiān)控這兩個(gè)時(shí)鐘信號(hào),如有需要?jiǎng)t調(diào)整VCO 時(shí)鐘。PLL 輸出時(shí)鐘fPLL由VCO 時(shí)鐘經(jīng)K2 分頻產(chǎn)生、或由振蕩器時(shí)鐘經(jīng)K1分頻產(chǎn)生[3]。
2)正常模式下,參考頻率fR經(jīng)P 分頻、N 倍頻和K2 分頻產(chǎn)生PLL 時(shí)鐘[3]:
圖2 PLL 正常模式框圖
3)預(yù)分頻模式下,參考頻率fR經(jīng)K1 分頻產(chǎn)生PLL 時(shí)鐘[3]:
4)未鎖相模式下,PLL 以壓控振蕩器(VCO)基頻fVCObase工作,fVCObase經(jīng)K2 分頻產(chǎn)生PLL 時(shí)鐘[3]:
1)DAVE 中的有關(guān)系統(tǒng)時(shí)鐘的設(shè)定
先設(shè)為使用8 MHz 的外部時(shí)鐘源,最終的系統(tǒng)時(shí)鐘頻率fsys=80 MHz。系統(tǒng)時(shí)鐘的輸出管腳在調(diào)試完成后應(yīng)該關(guān)閉,防止干擾產(chǎn)生。
圖4 PLL 設(shè)定
2)在由DAVE 和Keil 生成的C 語言文件中找到MAIN_vChangeFreq()函數(shù),它就是鎖相環(huán)(PLL)的配置函數(shù)。通過對(duì)該函數(shù)的修改,就可以實(shí)現(xiàn)外部與內(nèi)部時(shí)鐘源的切換。
A、該函數(shù)初始的程序流程圖如下:
圖5 函數(shù)初始的程序流程圖
在這種狀態(tài)下,一旦外部晶振失效,CPU 將處于死機(jī)狀態(tài),無任何信號(hào)輸出。
B、增加用戶函數(shù)后,能夠?qū)崿F(xiàn)時(shí)鐘源切換的函數(shù)MAIN_vChangeFreq()的流程圖
圖6 增加用戶函數(shù)后的程序流程圖
在這種狀態(tài)下,一旦外部晶振失效,CPU 將執(zhí)行用戶函數(shù),使CPU 能夠利用5MHz 的內(nèi)部時(shí)鐘生成80 MHz 的系統(tǒng)時(shí)鐘。
3)上個(gè)流程圖中提到的用戶函數(shù)代碼如下:
函數(shù)說明:在外部時(shí)鐘源失效的情況下,使fR 來自于內(nèi)部時(shí)鐘源,PLL 由上電基礎(chǔ)模式(Fsys=10 MHz)或VCO 預(yù)分頻模式換到VCO 正常模式,返回Error 值
通過對(duì)由DAVE 和Keil 生成的MAIN_vChangeFreq()函數(shù)的修改,實(shí)現(xiàn)了單片機(jī)在正常狀態(tài)下以高精度系統(tǒng)時(shí)鐘運(yùn)行,在外部晶振失效時(shí)以內(nèi)部時(shí)鐘源產(chǎn)生的系統(tǒng)時(shí)鐘運(yùn)行的工作模式。
[1]程軍.億恒(西門子) C166 系列——16 位單片機(jī)原理與開發(fā)[M].北京:北京航空航天大學(xué)出版社,2001.
[2]譚浩強(qiáng).C 程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,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.