正文
1.時鐘源
晶振好比人的心臟,晶振產生的時鐘脈沖好比心臟產生的心跳,所以,晶振對于MCU來講必不可少,晶振沒有起振,MCU必定無法工作。
1.1 有源晶振和無源晶振
無源晶振又名“無源晶體”、“石英晶體諧振器”,英文名Crystal或Crystal Resonator。有源晶振又稱“石英晶體振蕩器”,英文名Crystal Oscillator。
1.1.1 無源晶振
無源晶振一般有兩個引腳,無極性。它自身無法振動,一般外部都接有兩個10-22PF的瓷片電容。
無源晶振參考電路無源晶振信號質量較差,通常需要精確匹配外圍電路(用于信號匹配的電容、電感、電阻等),更換不同頻率的晶體時周邊配置 電路也需要做相應的調整。一般建議采用精度較高的石英晶體。
1.1.2 有源晶振
有源晶振有4只引腳,是一個完整的振蕩器,其中除了石英晶體外,還有晶體管和阻容元件,因此體積較大。有源晶振的封裝有4個引腳,分別為VCC (電壓)、GND (地)、OUT (時鐘信號輸出)、NC (空腳)。
有源晶振參考電路有源晶振不需要CPU的內部振蕩器,信號穩定,質量較好,且連接方式比
較簡單(主要做好電源濾波,通常使用一個電容和電感構成濾波網絡,輸出端用一個小阻值的
電阻過濾信號即可) , 不需要復雜的配置電路。
1.1.3 有源晶振和無源晶振的區別
1、有源晶振比較貴,但是有源晶振自身就能振動。無論無源晶振,還是有源晶振,都有自身的優點和缺點所在,若考慮產品成本,建議可以選擇無源晶振電路;若考慮產品性能,建議選擇有源晶振電路,省時方便也能保證產品性能。
2、無源晶振最高精度為5ppm, 而有源晶振的精度則可以達到0. 1ppm。精度越高, 頻率穩定性也更好。有源晶振在穩定性上要勝過無源晶振,但也有自身小小的缺陷,有源晶振的信號電平是固定,所以需要選擇好合適輸出電平,靈活性較差。
3、有源晶振一般4個腳,1個電源,1個接地,1個信號輸出端,1個NC (空腳)。有個點標記的為1腳,按逆時針(管腳向下)分別為2、3、4。
4、無源晶振有2個引腳,要借助于外部的時鐘電路(接到主IC內部的振蕩電路)才能產生振蕩信號,自身無法振蕩。
1.1 振蕩器電路(OSC)
振蕩器電路是一種 Pierce 振蕩器(Pierce oscillator),設計用于與外部晶體(external crystal) / 陶瓷諧振器(ceramic resonator)或外部穩定時鐘源(external stable clock source)配合使用。 該電路由一個反向放大器組成, XTAL1 作為輸入, XTAL2 作為帶有集成反饋電阻的輸出。
1.1.1外部輸入時鐘模式
使用外部輸入時鐘模式時,外部時鐘信號連接到OSC模塊的XTAL1引進,XTAL2引腳保持懸空狀態。
Figure 1 AURIX TC3xx Platform Direct Clock Input
如果在正常模式直接使用外部時鐘提供的時鐘信號時,不使用外部晶體 / 陶瓷諧振器并繞過振蕩器,則輸入頻率需要等于或大于 PLL 的 DCO 輸入頻率 (該值在Data sheet中列出)。
1.1.2 外部晶體 / 陶瓷諧振器模式
Figure 2 顯示了兩種工作模式的推薦外部電路:外部晶體 / 陶瓷諧振器模式 (帶和不帶外部組件)。
Figure2 External Circuitry for Crystal / Ceramic Resonator operation
1.1.3 OSC控制寄存器
Oscillator Circuit Control Register用來配置OSC模式和晶振頻率。主要用到的配置位域為:OSCCON.MODE 配置晶振模式
OSCCON.OSCVAL配置晶振頻率
OSCCON.PLLLV標識OSC頻率是否可用
OSCCON.PLLHV標識OSC頻率是否可用
1.1.4 配置OSC
只有配置了OSC后,外部晶振才能作為時鐘源工作。
Power-on復位后OSC模塊是被disabled,需要重新配置。在任何其他重置過程中和之后,振蕩器不會受到影響,并按照先前配置的方式工作,這種情況下不需要重新配置。
可以通過SSW來配置OSC,也可以在App中直接配置OSC。值得注意的是:OSCCON寄存器是受Endinit保護的,配置的時候需要解鎖Endinit。
參考文檔:
1.1.5 OSC看門狗
通過配置 SYSPLLCON0.Insel = 01B ,選擇振蕩器時鐘作為看門狗的源。
與系統 PLL 結合使用時,將實施監控功能。定義此功能的目的是檢測外部晶體 / 陶瓷諧振器的嚴重故障。系統可以檢測到時鐘輸入丟失或輸入頻率過高 (在較高諧波上運行)。
振蕩器監視程序監視來自 OSC 的傳入時鐘頻率 fOSC。 穩定且定義的輸入頻率是操作的強制要求。 因此,每次系統重置后都會自動選擇此模式。
預期輸入頻率 fOSC通過位字段 OSCCON.OSCVAL 選擇。OSC WDT 檢查頻率是否過低或過高。
fOSC = OSCCON.OSCVAL - 1 + 16MHz
在配置 OSC WDT 功能之前,應禁用所有 SMU 振蕩器看門狗報警響應選項,以避免意外的 SMU 報警。此后,可以更改 OSCCON.OSCVAL 的值。然后, OSC_WDT 應通過設置 OSCCON.OSCRES 重置。這將請求使用新配置啟動 OSC WDT 監控。當設定 OSCCON.PLLLV 和 / 或 OSCCON.PLLHV 的預期正監測結果時,輸入頻率處于預期范圍內。當設置 OSCCON.OSCRES 清除 OSCCON.PLLLV 和 OSCCON.PLLHV 時,應設置兩個狀態標志。因此,在再次啟用 SMU 報警響應之前,應清除這兩個標志。如果只設置了位 OSCCON.OSCRES 而未對 OSCCON.OSCVAL 進行任何修改,也應使用 SMU 報警禁用 - 清除 - 啟用序列。
如果 SMU 檢測到振蕩器監視報警,則必須執行與 PLL 鎖定丟失事件相同的恢復過程。
Note:
振蕩器看門狗主要用于 PLL 輸入時鐘 fOSC _i通過寄存器 SYSPLLCON0.Insel = 01B 設置為 fOSC0 時。如果 SYSCLK 通過 SYSPLLCON0.Insel = 10B 用作 fOSC _i的源,用戶應將 SYSCLK 頻率限制在與使用晶體相同的范圍內,或禁用 SMU 中的看門狗報警。通過 SYSPLLCON0.Insel = 00B 使用備份時鐘作為 fOSC _i的輸入時,也需要禁用看門狗報警。 數據表中列出了通過分配的 GPIO 輸入引腳驅動 SYSCLK 時的可用晶體頻率范圍和允許的頻率范圍。
1.1.6 配置SMU和時鐘相關的Alarm
SMU模塊在后續的TC3xx系類文章中再詳細講解,這里僅僅列出在配置OSC時相關的SMU寄存器。
只有SMU_KEYS寄存器的CFGLCK[7:0]配置為0xBC時才能配置SMU.
配置SMU_AGiCFj寄存器Disable Clock相關的Alarm.
和ClockAlarm相關的Group是Group 8, 也就是AGiCFj中I == 8.
Note: AG8CF0, AG8CF1, AG8CF2三個寄存器的同一個bit的組合關系決定一個Alarm的類型。
舉例:
AG8CF0[0].CF0, AG8CF1[0].CF0, AG8CF2[0].CF0就是三個bit, 組合為一個0x0 – 0x7的具體Alarm類型,如果
AG8CF0[0] == 1,
AG8CF1[0].CF0 == 1,
AG8CF2[0] .CF0== 1,
那么最后組合為111 = 0x7,產生的Alarm就是SMU_CPU_RST.
1.2 備用時鐘
備用時鐘源可用作備用時鐘源。此時鐘源提供穩定但可靠的時鐘源,可用作系統的時鐘源。它提供的準確度低于外部晶體或陶瓷諧振器。不能啟用或禁用備份時鐘,也不能通過其他方式控制備份時鐘,以阻止其常規操作。因此,除了選擇備份時鐘作為源 (CCUCON0.CLKSEL = 00B 作為時鐘分配的時鐘源, SYSPLLCON0.Insel = 00B 作為兩個 PLL 的時鐘源) 外,沒有可用的控制位。
1.3 OSC實際應用配置
需求:配置使用一個20MHz的外部無源晶振。
#include"IfxScu_reg.h" #include"IfxSmu_reg.h" staticuint8Startup_ClockInit_ConfigOSC(void) { /*DisableSMUClockAlarm*/ MODULE_SMU.KEYS.U=(uint32)0xBCU;/*EnableaccesstoSMUregisters*/ MODULE_SMU.CMD.U=(uint32)0x00000005; MODULE_SMU.AG[8].U=0x1FU;/*ClearSMUAlarms*/ MODULE_SMU.KEYS.U=(uint32)0U; /*CongigOSC--Start*/ Ifx_SCU_OSCCONscuOsccon; uint32timeoutCount; uint8error=0; UnlockEndinit_Core0(); scuOsccon.U =MODULE_SCU.OSCCON.U; scuOsccon.B.MODE = 0U; /*fOSC=OSCCON.OSCVAL-1+16MHz*/ scuOsccon.B.OSCVAL=(uint32)5U; MODULE_SCU.OSCCON.U = scuOsccon.U; /*Checkiftheconfigurationisvalid*/ timeoutCount=0xFFFFF; while((MODULE_SCU.OSCCON.B.PLLLV == 0U) && (MODULE_SCU.OSCCON.B.PLLHV == 0U)) { if(((--(timeoutCount))<=?0) ????????{ ????????????(error) = 1; ????????????break; ????????} ????}?? /*Congig?OSC?--?End*/ ????/*?Enable?SMU?Clock?Alarms?*/ ????MODULE_SMU.KEYS.U?=?(uint32)0xBCU;?????????????/*?Enable?access?to?SMU?registers?*/ ????MODULE_SMU.CMD.U??=?(uint32)0x00000005; ????MODULE_SMU.AG[8].U??=?0x1FU;???/*?Clear?SMU?Alarms*/ ????MODULE_SMU.KEYS.U?=?(uint32)0U; ????LockEndinit_Core0(); ????return?error; }
審核編輯:劉清
-
有源晶振
+關注
關注
1文章
885瀏覽量
20548 -
晶體管
+關注
關注
77文章
9641瀏覽量
137876 -
晶體振蕩器
+關注
關注
9文章
616瀏覽量
29061 -
瓷片電容
+關注
關注
0文章
76瀏覽量
14573 -
時鐘系統
+關注
關注
1文章
99瀏覽量
11707
原文標題:TC3xx芯片Clock System功能詳解-時鐘源OSC
文章出處:【微信號:汽車電子嵌入式,微信公眾號:汽車電子嵌入式】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論