前言
本文包括TC3xx MCU的復(fù)位系統(tǒng),時(shí)鐘系統(tǒng)和看門狗模塊三部分內(nèi)容。在復(fù)位系統(tǒng)部分主要介紹了各種復(fù)位類型。在時(shí)鐘系統(tǒng)部分主要介紹時(shí)鐘源選擇,PLL倍頻配置,時(shí)鐘分發(fā)等內(nèi)容。在看門狗模塊部分主要介紹了開門狗復(fù)位的觸發(fā)路徑,看門狗模塊的工作原理,CPU EndInit/Safe EndInit的實(shí)現(xiàn)原理等內(nèi)容。
1.Reset
POST這個(gè)信號(hào)對(duì)于MCU來說是雙向的,也就是說在上電過程中PORST是MCU的輸出引腳,在完成上電過程后,PORST是MCU的輸入引腳。ESR0是受PORST控制的,PORST輸出低電平的時(shí)候,ESR0也會(huì)輸出低電平。
從POST引腳引起的reset就叫Warm Power On Reset,Cold PORST復(fù)位的范圍最大,基本上MCU所有的模塊都會(huì)Reset。
剛上電的時(shí)候,MCU的電壓是從0往上升的,所以剛開始的時(shí)候MCU處于一個(gè)under voltage的狀態(tài),MCU主要監(jiān)控VEXT, VDDP3, VDD三個(gè)輸入電源,在剛開始的時(shí)候只要這三個(gè)電源有一個(gè)處于under voltage狀態(tài),或門(OR)就會(huì)輸出點(diǎn)平導(dǎo)通MOS管,PORST就會(huì)被拉低到地。
所以在電源上升的過程中這三個(gè)電源有一個(gè)處于LBD Reset Hold(電源監(jiān)控閾值)以下,MOS管就會(huì)被導(dǎo)通,PORST就會(huì)被一直拉低到地(輸出狀態(tài),輸出低電平)。
電壓起來后(大于監(jiān)控閾值),MOS管關(guān)斷,PORST變?yōu)檩斎霠顟B(tài),如果PORST外接了一個(gè)IC或者復(fù)位按鈕給了一個(gè)低電平,也會(huì)對(duì)MCU產(chǎn)生Reset(Warm Power On Reset)。
電壓沒起來前的Reset叫做Cold Power On Reset。
System or Application Reset包含的種類比較多:
1)Software reset
2)來自于SMU的reset
3)來自ESR0的復(fù)位請(qǐng)求
一些模塊可以單獨(dú)Reset(SW Module reset,Debug Reset)。
復(fù)位原因寄存器
STM0-STM5代碼STM compare match造成的Reset
EVRC, EVR33,SWD代表三個(gè)低電壓引起的Reset
STBYR表示Standby regulator的under voltage detect
正常情況下Reset后這個(gè)寄存器的值應(yīng)該是0x10010000,也就是PORS和STBYR會(huì)被置位。
Reset status register中的關(guān)于cold power on reset的Flag需要軟件清除(RSTCON2.CLRC),不然就會(huì)一直為1 。
第四種的cold reset原因是:EVR previous regulator的輸出/standby supply電壓小于1.13V。
Warm power on reset就是在POST變?yōu)檩斎霠顟B(tài)后,外部對(duì)POST產(chǎn)生一個(gè)低電平引起的復(fù)位(RAM數(shù)據(jù)是可以保持的)。
POSR和ESR0的復(fù)位時(shí)序:首先在POST(Input)上產(chǎn)生一個(gè)下降沿的負(fù)脈沖,通過MCU內(nèi)部的一些邏輯電路產(chǎn)生延遲后ESR0被拉低,MCU內(nèi)部的一些模塊和電路(Pads/Port Reset)就會(huì)被Reset,在ESR0被拉下來以后,CPUx核、Peripheral、Flash、Clock就會(huì)發(fā)生復(fù)位,這些模塊復(fù)位后ESR0就會(huì)被釋放掉,從0變成1,從這個(gè)點(diǎn)開始,MCU的Firmware(Boot rom)開始執(zhí)行(Execution)。
對(duì)于ESR0我們也可以配置一個(gè)ESR0的delay,當(dāng)ESR0的delay大于Boot rom的執(zhí)行時(shí)間后,Boot rom執(zhí)行完準(zhǔn)備跳轉(zhuǎn)到User code前會(huì)去檢測(cè)ESR0是不是被拉低,如果沒有被拉低的話,就會(huì)等待ESR0被拉低后再跳轉(zhuǎn)到User code。
2.Clock system
時(shí)鐘選擇部分:外部晶振接入作為MCU的source clock,SYSCLK這個(gè)Pin腳信號(hào)輸入作為MCU的source clock,也可以使用fback這個(gè)100MHz的片內(nèi)時(shí)鐘作為source clock。
倍頻PLL部分:在TC3xx里面有兩個(gè)PLL:
1)System_PLL主要是倍頻后給MCU的內(nèi)核提供時(shí)鐘。
2)Peripheral_PLL主要是倍頻后通過一些分頻給外設(shè)提供時(shí)鐘。
時(shí)鐘分配(Distribution)部分:System_PLL產(chǎn)生倍頻時(shí)鐘fPLL0,Peripheral_PLL產(chǎn)生倍頻時(shí)鐘fPLL1和fPLL2,他們通過Clock Distribution
后通過時(shí)鐘分頻器可以產(chǎn)生各種各樣的時(shí)鐘頻率供外設(shè)使用。
TC3xx有兩種內(nèi)部晶振:
1)100MHz的 Back-up Clock
2)70MHz的 Standby Clock,精度比較低,給SCR提供時(shí)鐘。
EXTCLK0和EXTCLK1可以配置輸出上面各種時(shí)鐘用來觀測(cè)。
一般我們選擇20MHz或者25MHz的外部晶振輸入,通過System_PLL倍頻后產(chǎn)生一個(gè)300MHz的fPLL0,fPLL0一般直接輸出300MHz給CPU各個(gè)內(nèi)核提供時(shí)鐘。通過Peripheral_PLL產(chǎn)生160MHz的fPLL1和200MHz的fPLL2,再通過分配給各種外設(shè)提供時(shí)鐘。
fsource0,fsource1,fsource2就是fPLL0,fPLL1,fPLL2通過各種xxxDIV分屏器產(chǎn)生時(shí)鐘給各個(gè)模塊使用,一般fCPUx是300MHz,fGETH為150MHz。
Note:fMCANH是給CAN模塊的寄存器和RAM操作提供時(shí)鐘的,fMCAN是給CAN波特率產(chǎn)生提供時(shí)鐘的。
fSRI通過分頻產(chǎn)生fCPUx給CPU提供時(shí)鐘,三個(gè)CPU的時(shí)鐘可以不同,CPU時(shí)鐘的改變不會(huì)影響其他外設(shè)時(shí)鐘。
但是注意系統(tǒng)時(shí)鐘頻率的改變會(huì)使得系統(tǒng)電流發(fā)生改變,影響系統(tǒng)的穩(wěn)定性。
外接晶振有兩種模式可以選擇:
1)External Input Mode,這種模式下只需要用到輸入的XTAL1就行了(XTAL2不需要),也就是在這種模式下需要接一個(gè)有源晶振。
2)External Crystal Mode,這種模式下XTAl1和XTAL2都會(huì)用到,外部接的無源晶振。
外部晶振頻率范圍是16MHz到40MHz。
在TC3xx里面還有有l(wèi)oad capacitor(負(fù)載電容),也就是晶振的負(fù)載電容可以不用外部接,可以通過配置寄存器使用內(nèi)部負(fù)載電容。
Oscillator Watchdog
在System_PLL里面有一塊電路叫Oscillator Watchdog,這塊電路主要用來檢測(cè)輸入的晶振在一定的范圍里面。它的檢測(cè)方法是通過內(nèi)部的100MHz的fBAK通過1/40分頻產(chǎn)生一個(gè)2.5MHz的Reference Clock,以這個(gè)Reference Clock對(duì)fosc經(jīng)過1/(OSCVAL+1)分頻后的時(shí)鐘進(jìn)行Monitor,如果對(duì)比后在一個(gè)Tolerance range范圍外的話,就會(huì)置位OSCCON.PLLHV或者OSCCON.PLLLV兩個(gè)寄存器位域。
。
一般都是使用外部20MHz的輸入晶振以及分頻/倍頻參數(shù)來參數(shù)CPU和外設(shè)時(shí)鐘。
PLL配置流程:
1)使能使用外部晶振
2)Clock Control Unit的Input Clock選擇fBAK,Clock Control Unit已經(jīng)屬于Clock Distribution了,沒有選擇fPLL而是選擇fBAK作為它的輸入時(shí)鐘,所以這個(gè)時(shí)候CPU和Peripheral都是基于fBACK的。
3)選擇fosc作為PLL的輸入時(shí)鐘。
4)設(shè)置一個(gè)初始的PLL配置參數(shù),比如我們先把System_PLL倍頻到100MHz,Peripheral_PLL可以直接倍頻到最終頻率,比如Peripheral_PLL1到320MHz,Peripheral_PLL2到200MHz。
5)設(shè)置分頻寄存器。
6)把Clock Control Unit的Input Clock選擇從fBAK切換到PLL。
7)System_PLL也就是fPLL0慢慢從100MHz倍頻到300MHz,是的系統(tǒng)的電流平穩(wěn)上升。
CPU時(shí)鐘慢慢倍頻上去,讓電流的變化平滑上升。
3.Watchdog
TC3xx芯片的Watchdog在SCU模塊里面,Watchdog分為兩種,一種是CPU Watchdog,一種是Safety Watchdog,每一個(gè)CPU都有自己的CPU Watchdog。
每個(gè)Watchdog有三個(gè)Register,WDTxCon0,WDTxCon1,WDTxSR。
Watchdog一般情況下如果Watchdog time溢出了就會(huì)產(chǎn)生一個(gè)watch dog reset,在TC3xx中Watchdog的Timeout并不會(huì)直接觸發(fā)Reset,而是經(jīng)過配置SMU后會(huì)觸發(fā)SMU里面的一個(gè)Recovery Timer啟動(dòng),Recovery Timer的Timeout時(shí)間可以配置,單Recovery Timerout后就會(huì)產(chǎn)生一個(gè)Alarm,如果這個(gè)Alarm配置為Reset信號(hào)的話,就會(huì)觸發(fā)Reset。
EndInit的保護(hù)有三種:
1)“CE”保護(hù),只有把每一個(gè)CPU的ENDINIT設(shè)為0后,這個(gè)CPU的critical registers保護(hù)才被解除(可寫)。
2)“E”保護(hù),任意一個(gè)CPU的ENDINIT設(shè)為0后,所有CPU的system critical registers保護(hù)就解除了。
3)“SE”保護(hù),Safety Watchdog的ENDINIT設(shè)為0后,Safety EndInit的保護(hù)就解除了。
ENDINIT設(shè)置為0的操作,需要一套較為復(fù)雜的操作序列。
ENDINIT置為0需要一段時(shí)間,只有等到ENDINIT真的為0后才能執(zhí)行往下的操作,不然可能會(huì)產(chǎn)生異常。
EICON0和SEICON0是兩個(gè)Global的ENDINIT保護(hù)寄存器,如果不想改變Watchdog CPUx或者Safety Watchdog的ENDINIT值,但是又想解除保護(hù),就可以使用Global的EICON0和SEICON0(前提是EndInit的保護(hù)等級(jí)是“E”或者“SE”)。
對(duì)于保護(hù)等級(jí)為“E”或者“SE”的寄存器,在操作它之前需要先解除EndInit保護(hù)。
fsys類似fspb,類似于外設(shè)總線頻率。
復(fù)位以后CPU的Watchdog默認(rèn)是處在Time-Out Mode下的,WDT在Time-Out Mode下就會(huì)從0xFFFC開始往上計(jì)數(shù),如果計(jì)數(shù)到0xFFFF就會(huì)溢出,如果在計(jì)數(shù)到0xFFFF之前對(duì)WDT_CON0進(jìn)行了password access后對(duì)WDT_CON0進(jìn)行了Modify access,重新對(duì)WDT進(jìn)了reload value到REL_1值(寫寄存器前ENDINIT值改為1了,也就是先要介紹ENDINIT保護(hù)),這樣WDT從Time-Out模式切換到了Normal Mode,這個(gè)時(shí)候WDT開始從REL_1值晚上計(jì)數(shù)。
Note: 后面會(huì)介紹password access和Modify access
在上圖中的3)的地方對(duì)WDT_CON0進(jìn)行了password access,WDT就會(huì)切換到Time-Out Mode,WDT又從0xFFFC開始計(jì)數(shù),如果在4)這個(gè)點(diǎn),又對(duì)WDT_CON0做了password access就會(huì)切換WDT到Normal Mode,同時(shí)對(duì)WDT_CON0做了一次Modify access后,WDT從REL_2開始計(jì)數(shù)。
計(jì)數(shù)到0xFFFF后WDT就溢出了,觸發(fā)SMU的Timeout的Alarm,這個(gè)Alarm會(huì)觸發(fā)SMU里面的一個(gè)Recovery time進(jìn)行計(jì)數(shù),Recovery time也timeout后就會(huì)產(chǎn)生一個(gè)SMU的reset。
Password access的條件是LCK為0,ENDINIT為1。WDTxCON0.PW[7:2]寫入當(dāng)前WDTxCON0.PW[7:2]值的反轉(zhuǎn)值,WDTxCON0.PW[15:8]寫入當(dāng)前WDTxCON0.PW[15:8]值,這樣Password access就解鎖了。
如果Password成功以后,就相當(dāng)于這個(gè)寄存器被解鎖了,然后就可以在PW中填入新的Password,REL和ENDINIT也可以寫入新的值,當(dāng)完成Modify access后,這個(gè)寄存器就又被lock住了,如果要改它就需要再來一次password access。
當(dāng)WDT_CON0進(jìn)行了一次Password Access之后WDT的狀態(tài)會(huì)切換為Time-Out mode,也就是說接下來操作這個(gè)寄存器的時(shí)間必須要比較短,就是要在Watchdog Timeout之前完成操作。
Set EndInit的Modify Access動(dòng)作會(huì)設(shè)置WDT_CON0.INIT為1,WDT的Reload timer會(huì)重新Reload一次,也就是和Watchdog的喂狗操作是一樣的。
審核編輯:劉清
-
MOS管
+關(guān)注
關(guān)注
108文章
2373瀏覽量
66369 -
pll
+關(guān)注
關(guān)注
6文章
774瀏覽量
134998 -
MCU芯片
+關(guān)注
關(guān)注
3文章
246瀏覽量
11348 -
看門狗模塊
+關(guān)注
關(guān)注
0文章
3瀏覽量
1404 -
時(shí)鐘系統(tǒng)
+關(guān)注
關(guān)注
1文章
98瀏覽量
11678
原文標(biāo)題:簡析TC3xx Rest/Clock/Watch模塊
文章出處:【微信號(hào):eng2mot,微信公眾號(hào):汽車ECU開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論