新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Cortex-M3 (NXP LPC1788)之WDT窗口看門狗定時器

        Cortex-M3 (NXP LPC1788)之WDT窗口看門狗定時器

        作者: 時間:2016-11-19 來源:網絡 收藏
        看門狗定時器的用途是在微控制器進入錯誤狀態后的一段合理時間內將其復位。看門狗被是能后,如果用戶沒有在預先設定的時間內喂狗,那么會產生一個看門狗事件。

        看門狗定時器的寄存器有看門狗定時器常數計數器WDTC,每當在喂狗寄存器WDFEED中寫入喂狗序列,WDTC中的值就會被寫入看門狗定時計數器WDTV,WDTV中的值在看門狗時鐘的驅動下遞減。我們可以通過設置看門狗定時器報警中斷寄存器WDWARNINT寄存器,當WDWARNINT中的值和WDTV中的值匹配時,可以形成中斷。最重要的還有看門狗模式寄存器WDMOD,它控制著看門狗的使能,復位,更新模式以及超時標識和中斷標志。此外還有一個看門狗定時器窗口寄存器WDWINDOW,它決定了喂狗過程中允許的最大的WDTV。

        本文引用地址:http://www.104case.com/article/201611/318452.htm

        看門狗的時鐘有一個專用的振蕩器,提供了500KHZ的時鐘,該時鐘通過4分頻,提供DWTV計數。因此在下面的程序中給WDTC賦值1000000,則看門狗計數的周期為 (1/500KHZ)*1000000*4 = 8S .所以看門狗中斷每8秒產生一次。程序配置看門狗超時不復位,進入超時中斷以后軟件清除中斷標志和超時標識。

        注意:為了程序的簡潔,省去了之前介紹了的系統時鐘配置和串口的配置。具體的信息可查詢之前的文章。

        1. #include"LPC1788_REG.h"
        2. #include"uart.h"
        3. #definerWDMOD(*(volatileunsigned*)0x40000000)
        4. #definerWDTC(*(volatileunsigned*)0x40000004)
        5. #definerWDFEED(*(volatileunsigned*)0x40000008)
        6. #definerWDTV(*(volatileunsigned*)0x4000000C)
        7. #definerWDWARNINT(*(volatileunsigned*)0x40000014)
        8. #definerWDWINDOW(*(volatileunsigned*)0x40000018)
        9. charstr[]={"WDT_IRQoccur.rn"};
        10. voidWDT_IRQHandler(void)
        11. {
        12. rICER0|=0x1;
        13. Uart2SendS(str);
        14. rWDMOD&=~(0x1<<3|0x1<<2);
        15. rWDTC=1000000;
        16. rWDMOD|=0x1;
        17. rWDFEED=0xAA;
        18. rWDFEED=0x55;
        19. rISER0|=0x1;
        20. }
        21. intmain(void)
        22. {
        23. unsignedinti,j;
        24. rFIO1DIR|=(1<<18);//GPIO1.18->OUTPUT
        25. Init_Uart2();
        26. rWDTC=1000000;
        27. rWDMOD|=0x1;
        28. rWDFEED=0xAA;
        29. rWDFEED=0x55;
        30. rISER0|=0x1;
        31. while(1)
        32. {
        33. rFIO1PIN|=0x1<<18;
        34. for(i=0;i<10000;i++)
        35. for(j=0;j<1000;j++);
        36. //rWDFEED=0xAA;
        37. //rWDFEED=0x55;
        38. rFIO1PIN&=~(0x1<<18);
        39. for(i=0;i<10000;i++)
        40. for(j=0;j<1000;j++);
        41. }
        42. }
        如果將程序中紅色的兩句喂狗屏蔽,則程序每8S產生一次看門狗超時中斷,并且LED燈閃爍。串口打印信息如下。

        如果打開rWDFEED = 0xAA;rWDFEED = 0x55兩句代碼,由于有喂狗,所以程序不會進入超時中斷,串口也就不會有打印信息。


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 肥西县| 景宁| 镇赉县| 桂阳县| 叶城县| 富民县| 鞍山市| 肇东市| 饶平县| 法库县| 星子县| 云浮市| 蒲江县| 大兴区| 方城县| 长沙县| 枝江市| 平罗县| 昭觉县| 天柱县| 临沧市| 泸州市| 澄迈县| 上犹县| 东辽县| 松桃| 和政县| 渭源县| 浏阳市| 鹰潭市| 女性| 连州市| 四平市| 兴义市| 安泽县| 桂平市| 聂荣县| 绥中县| 中方县| 荥经县| 巩留县|