大多數(shù)微處理器有一些形式的硬件監(jiān)測(cè)器,當(dāng)硬件在沒(méi)有注意的情況下停止執(zhí)行代碼時(shí),監(jiān)測(cè)器可將微處理器及其周圍的硬件重置到一個(gè)已知的狀態(tài)。但在重置硬件之前,它可能有利于記錄固定存儲(chǔ)器(NVM)中的監(jiān)測(cè)器溢出事件用于調(diào)試。
圖1中的電路采用了兩個(gè)LMC555定時(shí)器,為了保存有用的系統(tǒng)數(shù)據(jù),它們延遲了硬件的重置。該電路中有微處理器專用的監(jiān)測(cè)器溢出引腳——WDOVF,以及一個(gè)I/O引腳。
LMC555定時(shí)器設(shè)置成他們的單穩(wěn)態(tài)或者最快捷的模式,在這種模式中,在觸發(fā)脈沖輸入引腳感應(yīng)到一個(gè)負(fù)脈沖之前,定時(shí)器的輸出都為低值。觸發(fā)后,輸出引腳在時(shí)間TH內(nèi)變?yōu)楦咧,TH由一個(gè)單電阻和電容確定如下:
為了進(jìn)行恰當(dāng)?shù)亩〞r(shí)操作,在輸出高值時(shí)期結(jié)束之間,觸發(fā)輸入必須再次變?yōu)楦咧。?jīng)過(guò)TH以后,輸出端變?yōu)榈椭,且在另一個(gè)負(fù)脈沖出現(xiàn)在觸發(fā)引腳以前都保持低值。定時(shí)器也有一個(gè)活動(dòng)的低重置引腳,切斷后,不管觸發(fā)引腳的輸入水平,該引腳都保持輸出低值。它也為下一個(gè)時(shí)間周期重置了定時(shí)器的內(nèi)部觸發(fā)器。
第一個(gè)LMC555探測(cè)到來(lái)自微控制器的監(jiān)測(cè)器溢出觸發(fā),提供一個(gè)延遲,這允許固件在重置之前記錄各種系統(tǒng)參數(shù)。第二個(gè)LMC555允許固件阻止緊急硬件重置。它是通過(guò)使WDOVF_CLEAR信號(hào)在最少時(shí)間段保持低值來(lái)實(shí)現(xiàn)的,這一時(shí)間的長(zhǎng)短是由第一個(gè)定時(shí)器集成電路用到的內(nèi)部RC元件決定的。
圖2表示的是兩個(gè)獨(dú)立的監(jiān)測(cè)器溢出事件發(fā)生的時(shí)間。第一個(gè)事件表明重置脈沖被延遲,沒(méi)有重置硬件,第二個(gè)事件表明在預(yù)定的時(shí)間延遲過(guò)后發(fā)出重置脈沖。圖示時(shí)間是用來(lái)自圖1的RC元件值和來(lái)自Atmel微控制器的監(jiān)測(cè)器溢出脈沖計(jì)算的TH,第一個(gè)定時(shí)器的TH為:
同樣,第二個(gè)定時(shí)器的TH為:
系列電容器C3,上升電阻器R3及二極管D1保證了第二個(gè)定時(shí)器的觸發(fā)TRG_2在定時(shí)器的輸出端OUT_1處發(fā)生高-低轉(zhuǎn)變之時(shí)都將保持高值。上升電阻器在OUT_1進(jìn)行高-低轉(zhuǎn)變之后給系列電容器充電,直到達(dá)到電源電壓。與上升電阻和系列電容相關(guān)的RC時(shí)間常數(shù)要小于第二定時(shí)器的輸出高值的周期。二極管使得第二定時(shí)器的觸發(fā)引腳的輸入電壓升為電源電壓。
在該例子中,當(dāng)發(fā)生監(jiān)測(cè)器溢出事件時(shí),設(shè)定微控制器發(fā)出一個(gè)相關(guān)的短的低活躍度的脈沖輸入專門的引腳,產(chǎn)生一個(gè)內(nèi)部中斷。一旦發(fā)生該事件,代碼跳至中斷服務(wù)程序,運(yùn)行代碼中幾個(gè)特定的行。這些包括清除中斷標(biāo)記,通過(guò)保持WDOVF_CLEAR I/O引腳來(lái)阻止緊急硬件重置,將調(diào)試數(shù)據(jù)保存到NVM,防止中斷,以及重置監(jiān)測(cè)器溢出定時(shí)器。
在這種情況下,硬件監(jiān)測(cè)事件,連同其他由事件決定的信息,都存儲(chǔ)在NVM中以便將來(lái)查看。當(dāng)監(jiān)測(cè)定時(shí)器停止一秒鐘時(shí),它會(huì)繞過(guò)中斷服務(wù)程序,最終重置硬件。