国产成人av人人爽人人澡-亚洲国产日韩欧美一区-好吊日视频这里只有精品-日本高清精品视频在线

您好,歡迎進(jìn)入深圳市穎特新科技有限公司官方網(wǎng)站!

您現(xiàn)在的位置:首頁 新聞資訊 >> 新聞?lì)^條 >> N76E003之WDT(看門狗定時(shí)器)
新聞資訊
NEWS INFORMATION

N76E003之WDT(看門狗定時(shí)器)

發(fā)布時(shí)間:2019-05-22

N76E003提供一個(gè)看門狗定時(shí)器(WDT),它可以配置成一個(gè)超時(shí)復(fù)位定時(shí)器用于復(fù)位整個(gè)設(shè)備。一旦由于外界干擾設(shè)備進(jìn)入非正常狀態(tài)或掛起,看門狗可以復(fù)位恢復(fù)系統(tǒng)。這有用于監(jiān)測(cè)系統(tǒng)運(yùn)行以提高系統(tǒng)可靠性。對(duì)于容易受到噪聲,電源干擾或靜電放電干擾的系統(tǒng),是十分有用的?撮T狗也可以配置成通用定時(shí)器,可以工作在空閑模式或掉電模式,用于周期中斷服務(wù)作為事件定時(shí)器或連續(xù)系統(tǒng)監(jiān)測(cè)。WDTEN[3:0] (CONFIG4[7:4])初始化WDT工作在超時(shí)復(fù)位定時(shí)器或通用定時(shí)器模式。

WDT帶一個(gè)獨(dú)立的分頻器用于分頻10K LIRC時(shí)鐘。分頻器的時(shí)鐘分頻可選,來決定超時(shí)間間隔。當(dāng)達(dá)到超時(shí)間隔,系統(tǒng)會(huì)被從空閑或掉電模式喚醒,且如果WDT中斷使能會(huì)產(chǎn)生一個(gè)中斷事件。如果WDT初始化為一個(gè)超時(shí)復(fù)位定時(shí)器,在經(jīng)過一個(gè)延時(shí)周期而軟件沒有任何動(dòng)作后會(huì)產(chǎn)生系統(tǒng)復(fù)位。

超時(shí)復(fù)位定時(shí)器
當(dāng)配置 CONFIG 位 WDTEN[3:0] (CONFIG4[7:4]) 不是 FH時(shí),WDT將初始化為一個(gè)超時(shí)復(fù)位定時(shí)器。如果WDTEN[3:0] 不是 5H, WDT在系統(tǒng)進(jìn)入空閑或掉電模式后允許繼續(xù)運(yùn)行。注意當(dāng)WDT初始化為超時(shí)復(fù)位定時(shí)器時(shí),WDTR 和 WIDPD 沒有作用。

在設(shè)備上電后,開始執(zhí)行軟件代碼,同時(shí)WDT開始計(jì)數(shù)。超時(shí)間隔時(shí)間通過WDPS[2:0] (WDCON[2:0])配置。當(dāng)
配置的超時(shí)事件發(fā)生,WDT會(huì)置位中斷標(biāo)志W(wǎng)DTF (WDCON.5)。如果WDT中斷使能位EWDT (EIE.4)和全局中
斷使能EA都置位,WDT中斷程序被執(zhí)行。同時(shí)如果系統(tǒng)在正常運(yùn)行中,在512個(gè)LIRC時(shí)鐘延時(shí)期間,系統(tǒng)可通
過置位WDCLR來清零計(jì)數(shù)器來避免系統(tǒng)被WDT復(fù)位。如果在這512個(gè)LIRC時(shí)鐘內(nèi)沒有寫1到WDCLR,WDT復(fù)
位將會(huì)發(fā)生。置位WDCLR位用來清零WDT計(jì)數(shù)器。如系統(tǒng)正常運(yùn)行,該位是自我清零。一旦WDT復(fù)位發(fā)生,
WDT復(fù)位標(biāo)志W(wǎng)DTRF (WDCON.3)將會(huì)被置位,除上電復(fù)位之外的其他任何復(fù)位后,該位都保持不變。用戶可
以通過軟件清零WDTRF。注意WDCON的所有位有寫入時(shí)序要求。

注意:WDT計(jì)數(shù)器需特別注意。硬件會(huì)自動(dòng)清除WDT計(jì)數(shù)器和預(yù)分頻數(shù)值在下面事件發(fā)生后:
(1)進(jìn)入空閑或掉電模式,或被喚醒從空閑或掉電模式
(2)重啟。它能阻止不可預(yù)測(cè)的系統(tǒng)重啟。
看門狗定時(shí)器復(fù)位的主要應(yīng)用是系統(tǒng)監(jiān)測(cè),這對(duì)于實(shí)時(shí)控制系統(tǒng)來說這很重要。在一些電源干擾,電磁干擾,
CPU可能執(zhí)行錯(cuò)誤代碼,或進(jìn)入不可控制的狀態(tài)。如果發(fā)生這些情況不加以控制,系統(tǒng)有可能崩潰。使用看門狗
定時(shí)器用戶可選擇理想的“喂狗”時(shí)間來清除WDT計(jì)數(shù)器。通過指令置位 WDCLR, 可使程序繼續(xù)運(yùn)行而不看門
狗定時(shí)器復(fù)位。如果干擾引起代碼運(yùn)行在錯(cuò)誤的狀態(tài)下,導(dǎo)致無法及時(shí)清除看門狗定時(shí)器,將引起芯片復(fù)位,使
系統(tǒng)從錯(cuò)誤的狀態(tài)恢復(fù)過來。
注意:如下條件會(huì)造成WDT復(fù)位失效,請(qǐng)避免。當(dāng)CKDIV有設(shè)定值(不等于00H),說明系統(tǒng)頻率除頻生效,
此時(shí)如果進(jìn)入掉電模式,WDT復(fù)位會(huì)失效。建議對(duì)于掉電模式喚醒的應(yīng)用,采用WKT喚醒。

通用定時(shí)器
看門狗定時(shí)器的另一個(gè)應(yīng)用是用作簡(jiǎn)單的,長(zhǎng)周期定時(shí)器。當(dāng)CONFIG 位 WDTEN[3:0] (CONFIG4[7:4]) 是
FH,WDT初始化為通用定時(shí)器。在這種模式下,WDTR 和 WIDPD 是可以通過軟件進(jìn)行訪問操作。

看門狗定時(shí)器通過設(shè)置WDTR為1開始運(yùn)行,通過清零WDTR停止。當(dāng)WDT配置的時(shí)間間隔到后,WDTF標(biāo)志會(huì)
置位?赏ㄟ^軟件查詢WDTF標(biāo)志來偵測(cè)是否超時(shí)。如果EWDT (EIE.4)和EA置位,WDT會(huì)產(chǎn)生中斷,接著WDT
會(huì)繼續(xù)計(jì)數(shù)。用戶必須清零WDTF并等待下一次溢出,通過查詢WDTF標(biāo)志或等待中斷發(fā)生。
在一些低功耗的應(yīng)用中,為節(jié)省功耗,CPU在沒有處理事件時(shí)常處于空閑模式。通過運(yùn)行定時(shí)器0~3,周期性的
的喚醒察看是否有需求響應(yīng),然后這種空閑模式下耗電量將達(dá)到毫安(mA)級(jí),為了減少耗電量達(dá)到微安(μA)級(jí)的
要求,當(dāng)沒有需求需要相應(yīng)的時(shí)候,CPU應(yīng)該停留在掉電模式,并且可以通過編程的時(shí)候間隔來喚醒。
N76E003配備了很有用的WDT喚醒功能,由于基于內(nèi)部10kHz的RC時(shí)鐘源,看門狗定時(shí)器功耗非常低,它能夠
在掉電模式下計(jì)數(shù)并喚醒CPU。

/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2016 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technoledge Corp. 
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//  Date   : Apr/21/2016
//***********************************************************************************************************

#define set_WIDPD BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;WDCON|=SET_BIT4;EA=BIT_TMP;

//***********************************************************************************************************
//  File Function: N76E003 Watch Dog as pure timer with interrupt demo code
//***********************************************************************************************************

#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"


/************************************************************************************************************
*    WDT interrupt sub-routine
************************************************************************************************************/
void WDT_ISR (void)   interrupt 10
{

                    //---------toggle GPIO1---------    
                        clr_GPIO1;
                        Timer0_Delay1ms(50);
                        set_GPIO1;
                        Timer0_Delay1ms(50);
                        clr_GPIO1;
                        Timer0_Delay1ms(50);
                        set_GPIO1;
                        Timer0_Delay1ms(50);
                    //---------end toggle GPIO2--------
        clr_WDTF;
        set_WDCLR;
}

/************************************************************************************************************
*    Main function 
************************************************************************************************************/
void main (void)
{
/* Note
  WDT timer base is LIRC 10Khz
*/
    
  Set_All_GPIO_Quasi_Mode;
    
                        clr_GPIO1;
                        Timer0_Delay1ms(500);
                        set_GPIO1;
                        Timer0_Delay1ms(500);
                        clr_GPIO1;
                        Timer0_Delay1ms(500);
                        set_GPIO1;
                        Timer0_Delay1ms(500);
    
//WDT init
//--------------------------------------------------------
//Warning:
//Pleaes always check CONFIG WDT disable first 
//only when WDT reset disable, WDT use as pure timer
//--------------------------------------------------------
      TA=0xAA;TA=0x55;WDCON=0x07;          //Setting WDT prescale 
        set_WDTR;                       //WDT run
        set_WDCLR;                                            //Clear WDT timer
        set_EWDT;
        EA =1;

#if 0
    while(1);
#else
        set_WIDPD;                                             //WDT run in POWER DOWM mode setting if needed
        while (1)
        {
            set_PD;
                    //---------toggle GPIO1---------    
                        clr_P04;
                        Timer1_Delay10ms(5);
                        set_P04;
                        Timer1_Delay10ms(5);
                        clr_P04;
                        Timer1_Delay10ms(5);
                        set_P04;
                        Timer1_Delay10ms(5);
                    //---------end toggle GPIO1---------
        }
#endif
}

#if   ...   
#else
...
#endif//與#if對(duì)應(yīng)
作為一個(gè)編譯“開關(guān)”,比如:
#if(條件滿足)
執(zhí)行代碼1
#else
執(zhí)行代碼2
#endif
假如編譯時(shí),確實(shí)滿足條件,則生成的程序文件(.exe文件)中不會(huì)有執(zhí)行代碼2的。如果用普通if語句,生成的程序文件就會(huì)有執(zhí)行代碼2,這個(gè)區(qū)別看看生成文件大小就可以知道。
如果你的條件在程序編譯前就已經(jīng)確定了,那就用#if;如果條件需要在程序運(yùn)行過程中才能判斷,則用if。
聯(lián)系方式0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤(rùn)豐創(chuàng)業(yè)園A棟2樓A08