新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > AVR的一點馴狗心得

        AVR的一點馴狗心得

        作者: 時間:2011-02-18 來源:網(wǎng)絡 收藏
        新的AVR系列(例如,ATMEGA168等)使用增強功能的看門狗(Enhanced Watchdog Timer),與原來的看門狗相比較,除了有相同復位的功能以外,還增加了中斷的功能設計時。使用看門狗的中斷功能,可以實現(xiàn)從Power Down狀態(tài)喚醒CPU;另外同時能使中斷和復位功能,可以在系統(tǒng)發(fā)生錯誤時,先進入中斷狀態(tài),保存關鍵數(shù)據(jù)到EEPROM,然后在進行系統(tǒng)復位。

        AVR新的看門狗與舊狗(例如,ATMEGA16等)比較,增加了新的功能的同時脾氣也有了不少改變。設計時要摸清它的脾氣,以防被狗咬。

        下面說明以ATMEGA16和ATMEGA168作一個簡單比較為例,簡要地說明一下注意要點:
        看門狗定時器控制寄存器– WDTCR:

        Atmega16:

        Atmega168:

        1.A1tmega168由于具有中斷功能,所以WDTCR增加了WDIF和WDIE兩個額外的bit的功能;

        2.增加了WDP3,溢出周期可以有長達8秒;

        3.新的看門狗在初始化時,WDT的值不再一定是0。只要SR寄存器上的WDRF置位,WDT也將被強制置位。這時,如果WDE要清零,必須要WDRF先清零。

        4.在設計時即使不用WDT,它也可能在無意中被能使,例如在runaway指針和調(diào)電情況下。因此即使不用WDT,在初始代碼中一定要檢查復位標志,如果WDT系統(tǒng)復位發(fā)生要采取處理步驟。


        最近重新設計一個項目,由原先使用的ATMEGA16更新到ATMEGA168。把原代碼轉(zhuǎn)換后,測試結(jié)果異常。經(jīng)過一天多的測試,才發(fā)現(xiàn)是新的看門狗惹的禍。以前用ATMEGA16,在初始化后才開始喂狗,可是新的AVR系列(例如ATMEGA168等),系統(tǒng)復位發(fā)生時(除上電復位外) ,WDT可能繼續(xù)運行,并使用最小溢出周期(大約15mS) ,造成了系統(tǒng)不斷復位。根據(jù)datasheet,在程序開始時的關狗后一切就恢復正常了:

        #include
        #include
        uint8_t mcusr_mirror;
        void get_mcusr(void)
        __attribute__((naked))
        __attribute__((section(".init3")));
        void get_mcusr(void)
        {
        mcusr_mirror = SR;
        SR = 0;
        wdt_disable();
        }

        5.使用看門狗的中斷時,當WDIF和WDIE置位,就會產(chǎn)生中斷。進入相應的中斷程序后,系統(tǒng)自動WDIF和WDIE清零。下次要使用看門狗的中斷時必須重新WDIE置位。


        評論


        相關推薦

        技術(shù)專區(qū)

        關閉
        主站蜘蛛池模板: 新竹县| 临桂县| 双牌县| 平和县| 衡东县| 神木县| 彭泽县| 南京市| 雷州市| 麻栗坡县| 武山县| 上饶市| 辽阳市| 泰安市| 龙游县| 东辽县| 滦南县| 河西区| 琼结县| 田林县| 虹口区| 杭锦后旗| 台北市| 象州县| 武安市| 新丰县| 卢龙县| 恩施市| 定襄县| 金乡县| 伊吾县| 通河县| 富顺县| 平罗县| 铁力市| 奉化市| 随州市| 永城市| 龙州县| 鲁甸县| 兴海县|