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