單片機外部與內(nèi)部時鐘源的切換
XC2336B是Infineon的16位微控制器XC2000家族中的一員,它將功能和性能都得到擴展的C166SV2內(nèi)核、功能強大的片上外設(shè)子系統(tǒng)和各種片上存儲器進行了完美結(jié)合。執(zhí)行速度更快、穩(wěn)定性更好、操作更簡單。
本文引用地址:http://m.butianyuan.cn/article/201611/319724.htm1 XC2336B單片機的時鐘產(chǎn)生
XC2336B單片機時鐘產(chǎn)生單元(CGU)可非常靈活的產(chǎn)生單片機所需的時鐘。通過鎖相環(huán)(PLL),時鐘產(chǎn)生單元(CGU)可將低頻外部時鐘轉(zhuǎn)換為高頻系統(tǒng)時鐘,無需外部直接產(chǎn)生高頻時鐘。時鐘產(chǎn)生單元(CGU)由時鐘發(fā)生器和時鐘控制單元(CCU)構(gòu)成。
XC2336B單片機帶有5 MHz的內(nèi)部時鐘源,可以在無外部時鐘信號的情況下產(chǎn)生系統(tǒng)時鐘(fsys)。該內(nèi)部時鐘源位于鎖相環(huán)(PLL)單元中,通過對該單元的合理設(shè)置,即可完成該單片機的無晶振工作。但由此產(chǎn)生的系統(tǒng)時鐘(fsys)受溫度影響很大,時鐘的精度不高,適合在簡單的應(yīng)用中使用。因此,常用的產(chǎn)生系統(tǒng)時鐘 (fsys)的方法是,由高精度振蕩器電路(OSC_HP)驅(qū)動一個外部晶振,產(chǎn)生的時鐘信號送入鎖相環(huán)(PLL)倍頻后產(chǎn)生系統(tǒng)時鐘(fsys)。振蕩器電路包含一個反相放大器,以XTAL1為輸入、XTAL2為輸出。
在某些使用環(huán)境中,由于震動等原因,外部晶振有可能損壞。但是,在這種情況下,又不希望單片機處于死機狀態(tài),希望單片機能夠發(fā)出一些報警信號,并能完成一些簡單功能。那么,能否讓單片機自動切換為內(nèi)部時鐘源工作呢?答案是肯定的。也就是要讓單片機在正常狀態(tài)下以高精度系統(tǒng)時鐘運行,在外部晶振失效時以內(nèi)部時鐘源產(chǎn)生的系統(tǒng)時
鐘運行,而且這兩個系統(tǒng)時鐘的值是一樣的。
要完成XC2336B單片機外部與內(nèi)部時鐘源的切換,最主要的設(shè)置是對鎖相環(huán)(PLL)的設(shè)置。因此我們先介紹一下XC2336B單片機的鎖相環(huán)(PLL)。
2 鎖相環(huán)PLL組成以及它的三種工作模式
1)PLL由壓控振蕩器(VCO)和反饋通路組成。反饋通路上的分頻器(N分頻)對VCO頻率分頻,得到的結(jié)果和外部經(jīng)P分頻處理的參考頻率進行比較。相位檢測電路根據(jù)這兩個時鐘信號的差值相應(yīng)控制VCO頻率(fVCO)。PLL鎖相檢測單元監(jiān)控并指示該狀態(tài)。相位檢測邏輯繼續(xù)監(jiān)控這兩個時鐘信號,如有需要則調(diào)整VCO時鐘。PLL輸出時鐘fPLL由VCO時鐘經(jīng)K2分頻產(chǎn)生、或由振蕩器時鐘經(jīng)K1分頻產(chǎn)生。
2)正常模式下,參考頻率fR經(jīng)P分頻、N倍頻和K2分頻產(chǎn)生PLL時鐘:
3)預(yù)分頻模式下,參考頻率fR經(jīng)K1分頻產(chǎn)生PLL時鐘:
4)未鎖相模式下,PLL以壓控振蕩器(VCO)基頻fVCObase工作,fVCObase經(jīng)K2分頻產(chǎn)生PLL時鐘:
3 實現(xiàn)外部與內(nèi)部時鐘源切換的步驟
1)DAVE中的有關(guān)系統(tǒng)時鐘的設(shè)定
先設(shè)為使用8 MHz的外部時鐘源,最終的系統(tǒng)時鐘頻率fsys=80 MHz。系統(tǒng)時鐘的輸出管腳在調(diào)試完成后應(yīng)該關(guān)閉,防止干擾產(chǎn)生。
2)在由DAVE和Keil生成的C語言文件中找到MAIN_vChangeFreq()函數(shù),它就是鎖相環(huán)(PLL)的配置函數(shù)。通過對該函數(shù)的修改,就可以實現(xiàn)外部與內(nèi)部時鐘源的切換。
A、該函數(shù)初始的程序流程圖如下:
在這種狀態(tài)下,一旦外部晶振失效,CPU將處于死機狀態(tài),無任何信號輸出。
B、增加用戶函數(shù)后,能夠?qū)崿F(xiàn)時鐘源切換的函數(shù)MAIN_vChangeFreq()的流程圖
在這種狀態(tài)下,一旦外部晶振失效,CPU將執(zhí)行用戶函數(shù),使CPU能夠利用5MHz的內(nèi)部時鐘生成80 MHz的系統(tǒng)時鐘。
3)上個流程圖中提到的用戶函數(shù)代碼如下:
函數(shù)說明:在外部時鐘源失效的情況下,使fR來自于內(nèi)部時鐘源,PLL由上電基礎(chǔ)模式(Fsys=10 MHz)或VCO預(yù)分頻模式換到VCO正常模式,返回Error值
4 結(jié)束語
通過對由DAVE和Keil生成的MAIN_vChangeFreq()函數(shù)的修改,實現(xiàn)了單片機在正常狀態(tài)下以高精度系統(tǒng)時鐘運行,在外部晶振失效時以內(nèi)部時鐘源產(chǎn)生的系統(tǒng)時鐘運行的工作模式。
評論