STM8 時鐘
主時鐘源:
1-24MHz高速外部晶體振蕩器(HSE)
最大24MHz高速外部時鐘信號(HSE user-ext)
16MHz高速內(nèi)部RC振蕩器(HSI)
128KHz低速內(nèi)部RC(LSI)
各個時鐘源可單獨打開或關(guān)閉,從而優(yōu)化功耗。
(一)HSE
高速外部時鐘信號可由下面兩個時鐘源產(chǎn)生:
HSE外部晶體/陶瓷諧振器
HSE用戶外部有源時鐘
為了最大限度減小輸出失真和減小啟動的穩(wěn)定時間,諧振器和負載電容應(yīng)盡可能得靠近振蕩器引腳。負載電容值應(yīng)根據(jù)所選的振蕩器進行調(diào)整。
- 外部晶體/陶瓷諧振器(HSE晶體)
外部1至24MHz的振蕩器其優(yōu)點在于能夠產(chǎn)生精確的占空比為50%的主時鐘信號。
硬件連接如圖14所示。更多詳情請參見數(shù)據(jù)手冊電特性章節(jié)。振蕩器在啟動時的輸出時鐘信號是不穩(wěn)定的,默認情況下,在時鐘信號被使用之前會插入2048個振蕩器周期的延遲。用戶可通過設(shè)置選項字節(jié)HSECNT來縮短穩(wěn)定時間,請參見數(shù)據(jù)手冊的選項字節(jié)章節(jié)。外部時鐘寄存器CLK_ECKR中的標志位HSERDY用以指示高速外部振蕩器是否穩(wěn)定。啟動時,HSE時鐘信號將不會生效直至此標志位被硬件置位。
HSE晶體可通過設(shè)置外部時鐘寄存器CLK_ECKR中的HSEEN位來打開或關(guān)閉。 - 外部時鐘源(HSE用戶外部時鐘)
這種模式下,必須由用戶提供一個外部時鐘,此時鐘的最高頻率可為24MHz。用戶可通過編程選項位EXTCLK選擇此模式。詳情請參見數(shù)據(jù)手冊的選項字節(jié)章節(jié)。此時,占空比約50%的外部時鐘信號(方波,正弦波,三角波)用以驅(qū)動OSCIN引腳,而OSCOUT引腳可做為通用輸入/輸出管腳使用。
(二)HSI
HSI信號由內(nèi)部16MHz RC振蕩器與一個可編程分頻器(分頻因子從1至8)產(chǎn)生。分頻因子由寄存器CLK_CKDIVR決定。
注意:啟動時,主時鐘源默認為HSI RC時鐘的8分頻,即fHSI/8
HSI RC可以提供一個低成本的16MHz時鐘源(無需外部器件),其占空比為50%。HSI啟動速度比HSE晶體振蕩器快,但是其精度即使經(jīng)過校準也仍然比外部晶體振蕩器或陶瓷諧振器低。內(nèi)部時鐘寄存器CLK_ICKR中的標志位HSIRDY用以指示HSI RC是否穩(wěn)定。啟動時,HSI時鐘信號將不會生效直至此標志位被硬件置位。HSI RC可通過設(shè)置內(nèi)部時鐘寄存器CLK_ICKR中的HSIEN位打開或關(guān)閉。
備份時鐘源
當HSE晶體振蕩器失效時,HSI/8可作為備份時鐘源(輔助時鐘源)使用。請參見8.6時鐘安全系統(tǒng)(CSS)。
快速啟動特性
如果寄存器CLK_ICKR中的FHWU位被置1,則MCU從停機(Halt)模式或活躍停機(Active Halt)模式喚醒時,HSI將自動被設(shè)為主時鐘源。
校準
每個產(chǎn)品在出廠時均已經(jīng)ST校準。
復(fù)位后,出廠校準值將被自動加載至內(nèi)部校準寄存器。
如果實際應(yīng)用中電壓或溫度偏差較大,將會影響RC振蕩器的速度。用戶可使用HSI時鐘校準寄存器(CLK_HSITRIMR)修正HSI的時鐘頻率。此寄存器中有3或4位用以存放一個附加的修正值,并與內(nèi)部HSI校準寄存器的值相加來對時鐘進行校正。
(三)LSI
128KHz的LSI RC時鐘是一個低功耗,低成本的可選主時鐘源,也可在停機(Halt)模式下作為維持獨立看門狗和自動喚醒單元(AWU)運行的低功耗時鐘源。LSI可通過設(shè)置內(nèi)部時鐘寄存器CLK_ICKR中的LSIEN位打開或關(guān)閉。
內(nèi)部時鐘寄存器CLK_ICKR中的標志位LSIRDY用以指示LSI是否穩(wěn)定。啟動時,LSI時鐘信號將
不會生效直至此標志位被硬件置位。
同HIS一樣,LSI出廠時已經(jīng)校準。但是,不可能再執(zhí)行進一步的校準。
注意:當獨立看門狗使用LSI為時鐘源時,為了保證CPU在系統(tǒng)出錯時不與獨立看門狗使用同一個時鐘,
當選項字節(jié)位LSI_EN為0時,LSI不能做為主時鐘。請參見STM8數(shù)據(jù)手冊中的選項字節(jié)章節(jié)。
時鐘切換
時鐘切換功能為STM8用戶提供了一種易用、快速、安全的從一個時鐘源切換到另一個時鐘源的途徑。
系統(tǒng)啟動
為使STM8系統(tǒng)快速啟動,復(fù)位后時鐘控制器自動使用HSI的8分頻(HSI/8)做為主時鐘。其原因為HSI的穩(wěn)定時間短,而8分頻可保證系統(tǒng)在較差的VDD條件下安全啟動。一旦主時鐘源穩(wěn)定,用戶程序可將主時鐘切換到另外的時鐘源。
主時鐘切換的過程
用戶可選擇下面兩種方式切換時鐘源:
自動切換
自動切換使用戶可使用最少的指令完成時鐘源的切換。應(yīng)用軟件可繼續(xù)其它操作而不用考慮切換事件所占的確切時間。
1.設(shè)置切換控制寄存器(CLK_SWCR)中的位SWEN,使能切換機制。
2.向主時鐘切換寄存器(CLK_SWR)寫入一個8位的值,用以選擇目標時鐘源。寄存器CLK_SWCR中的SWBSY被硬件置位,目標源振蕩器啟動。原時鐘源依然被用于驅(qū)動內(nèi)核和外設(shè)。
一旦目標時鐘源穩(wěn)定,寄存器CLK_SWR中的值將被復(fù)制到主時鐘狀態(tài)寄存器(CLK_CMSR)中去。
此時,SWBSY位被清除,新時鐘源替代舊時鐘源。寄存器CLK_SWCR中的標志位SWIF被置位,如果SWIEN為1,則會產(chǎn)生一個中斷。
- 手動切換
手動切換與自動切換不同,不能夠立即切換,但它允許用戶精確地控制切換事件發(fā)生的時間
1.向主時鐘切換寄存器(CLK_SWR)寫入一個8位的值,用以選擇目標時鐘源。寄存器CLK_SWCR中的SWBSY被硬件置位,目標源振蕩器啟動。原時鐘源依然被用于驅(qū)動內(nèi)核和外設(shè)。
2.用戶軟件需等待至目標時鐘源穩(wěn)定。寄存器CLK_SWCR中的標志位SWIF用以指示目標時鐘源是否已穩(wěn)定,如果SWIEN為1,則會產(chǎn)生一個中斷。
3.最后,由用戶軟件在所選的時間點,設(shè)置寄存器CLK_SWCR中的位SWEN,執(zhí)行切換。無論是手動切換還是自動切換,如果原時鐘源仍然在被其他模塊使用(如LSI在被獨立看門狗使用),則原時鐘源將不會被自動關(guān)閉。配置內(nèi)部時鐘寄存器CLK_ICKR和外部時鐘寄存器
CLK_ECKR中的相應(yīng)位,可關(guān)閉原時鐘源。如果由于某種原因時鐘切換沒有成功,軟件可通過清除標志位SWBSY以復(fù)位當前的切換操作,使寄存器CLK_SWR恢復(fù)原值(原時鐘源)。
外設(shè)時鐘門控
關(guān)閉未使用外設(shè)的時鐘可使STM8降低功耗。外設(shè)的時鐘門控(PCG)模式使用戶可在運行模式下隨時打開或關(guān)閉fMASTER與下列外設(shè)的連接:
- ADC
- I2C
- AWU(寄存器時鐘,而非計數(shù)器時鐘)
- SPI
- TIM[4:1]
- UART
- CAN(寄存器時鐘,而非CAN時鐘)
STM8系統(tǒng)復(fù)位后,所有外設(shè)時鐘均處于開的狀態(tài)。用戶可通過清除CLK_PCKENR1或CLK_PCKENR2中的PCKEN位來關(guān)閉相應(yīng)的外設(shè)時鐘。但是在關(guān)閉外設(shè)的時鐘前,用戶必須設(shè)置相應(yīng)的位禁用該外設(shè)。
為了使能一個外設(shè),用戶必須先設(shè)置寄存器CLK_PCKENR中對應(yīng)的PCKEN位,然后設(shè)置外設(shè)控制寄存器中的外設(shè)使能位。
AWU計數(shù)器是由獨立于fMASTER的內(nèi)部或外部時鐘(LSI或HSE)驅(qū)動,因此,即使寄存器的時鐘已被關(guān)掉,該外設(shè)依然可以繼續(xù)運行。時鐘安全系統(tǒng)
時鐘安全系統(tǒng)用于監(jiān)控HSE時鐘源是否失效。當fMASTER使用HSE做為時鐘源時,如果HSE時鐘由于諧振器損壞、斷開或其它原因而失效,時鐘控制器將激活安全恢復(fù)機制,將fMASTER自動切換到輔助時鐘源HSI/8。STM8系統(tǒng)將一直使用輔助時鐘源,直至MCU被復(fù)位。
設(shè)置時鐘安全系統(tǒng)寄存器CLK_CSSR中的CSSEN位,可使能STM8的時鐘安全系統(tǒng)。為安全起見,CSS一旦使能就不能被關(guān)閉,直到下一次復(fù)位。
必須滿足下面的條件,CSS方可檢測HSE石英晶體的失效:
- HSE晶體開:(外部時鐘寄存器CLK_ECKR中的位HSEEN=1)
- HSE振蕩器被置為石英晶體(選項位EXTCLK為1)
- CSS功能開:(寄存器CLK_CSSR中CSSEN=1)
如果當前的主時鐘源為HSE,當失效被檢測到時,CSS將執(zhí)行以下操作:- 寄存器CLK_CSSR中的CSSD位被置位,如果CSSIEN為1,則同時產(chǎn)生一個中斷。
- CLK_CMSR,CLK_SWR,及CLK_CKDIVR中的HSIDIV[1:0]位被置為復(fù)位值(CKM[7:0]=SWI[7:0]=E1h)。HSI/8成為主時鐘。
- 內(nèi)部時鐘寄存器CLK_ICKR中的HSIEN被置位(HSI開)。
- 外部時鐘寄存器CLK_ECKR中的HSEEN被清除(HSE關(guān))。
- AXU位被置位,用以指示輔助時鐘源HSI/8被強制使用。
用戶可通過軟件清除CSSD位,但AXU位只能由復(fù)位清除。為了提高時鐘頻率,用戶在清除寄存器CLK_CSSR中的CSSD位以后,可修改寄存器
CLK_CKDIVR中的HSIDIV[1:0]位。
如果失效發(fā)生時HSE不是主時鐘源,STM8主時鐘將不會被切換到輔助時鐘源,以上操作也不會發(fā)生,僅執(zhí)行下面的操作:- 外部時鐘寄存器CLK_ECKR中的HSEEN被清除,HSE關(guān)閉。
- 寄存器CLK_CSSR中的位CSSD被置位,如果CSSIEN為1,則同時產(chǎn)生一個中斷。
如果HSE不是當前主時鐘源,且主時鐘正在被切換至HSE,則在清除CSSD位之前,必須先清除寄存器CLK_SWCR的SWBSY位。
如果當失效被檢測到時,HSE被CCOSEL選擇為時鐘輸出模式(參見時鐘輸出功能(CCO)),則HSI(HSIDIV)將替代HSE,被自動強制選擇為輸出時鐘。時鐘輸出CCO
可配置的時鐘輸出功能使STM8用戶可在外部管腳CCO上輸出指定的時鐘。STM8S的用戶可選擇下面6種時鐘信號之一做為CCO時鐘:
- fHSE
- fHSI
- fHSIDIV
- fLSI
- fMASTER
- fCPU(可選擇分頻值)
注意:在所有可能的分頻值下,不能保證信號的占空比全部為50%
通過配置時鐘輸出寄存器CLK_CCOR中域CCOSEL[3:0]可選擇輸出的時鐘。用戶需為指定的I/O引腳(參見管腳描述章節(jié))選擇期望輸出的時鐘。此I/O必須通過配置寄存器Px_CR1對應(yīng)的位為1來設(shè)置為上拉輸入或推挽輸出模式。
一旦可配置時鐘輸出寄存器CLK_CCOR的位CCOEN=1,就開始輸出所選定的時鐘信號。如果CCOBSY為1,則表明可配置時鐘輸出系統(tǒng)正在工作。只要CCOBSY為1,CCOSEL位就會被寫保護。
如果需要,CCO可自動激活目標振蕩器。當所選時鐘就緒時,CCORDY被置位。STM8用戶可通過清除CCOEN位來禁用時鐘輸出功能。CCOBSY位和CCORDY位都將保持為1直到禁用操作結(jié)束。從清除CCOEN位到這兩個標志位被復(fù)位之間的時間可能會很長,例如當所選的輸出時鐘相對于fCPU頻率很低時。
時鐘中斷
當下列事件發(fā)生時,時鐘控制器可產(chǎn)生中斷:
- 主時鐘源切換事件
- CSS事件
這兩個中斷均可被獨立屏蔽。
評論