|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
2114看門狗問題,大家?guī)臀覝y試一下這個程序 |
| 作者:robinsun 欄目:ARM技術(shù) |
存在的問題:是不是外部中斷影響看門狗?我現(xiàn)在一旦有外部中斷發(fā)生,程序就 重啟。 1, 按下KEY1 程序會重新啟動,打印出Do your best! 2, 禁止看門狗之后,程序運行正常,按下KEY1 會打印出00 (用2100的開發(fā)板,按下KEY1是表示有外部中斷。) 測試的時候別忘了修改 startup.s 文件中的 ;設(shè)置系統(tǒng)模式堆棧 ;MSR CPSR_c, #0xdf MSR CPSR_c, #0x5f LDR SP, =StackUsr 來容許中斷。 #include "config.h" #define CR 0x0D #define UART_BPS 115200 #define RUN 1 //定義鍵值 #define SET_TIME 2 #define MANUAL_OPERATION 3 #define MAIN_VALVE 4 #define RAIN_DEALY 5 #define WATER_BUDGET 6 #define SOAK_SETTING 7 #define ANY_CYCLE 8 #define WEEK_CYCLE 9 #define MONTH_CYCLE 10 #define START_TIME 11 #define PERSIST_TIME 12 #define ARROW_UP 13 #define ARROW_DOWN 14 #define SWITCH_F 15 #define STATION_NUM 16 #define K1 (1<<16) //key1 連接P1.16,為0時是gpio #define K2 (1<<17) //key1 連接P1.17 #define K3 (1<<18) //key1 連接P1.18 #define K4 (1<<19) //key1 連接P1.19 #define K5 (1<<29) //key1 連接P1.20 #define K6 (1<<21) //key1 連接P1.21 #define K7 (1<<22) //key1 連接P1.22 #define K8 (1<<23) //key1 連接P1.23 #define K9 (1<<24) //key1 連接P1.24 #define K10 (1<<25) //key1 連接P1.25 #define K11 (1<<10) //key1 連接P0.10 #define K12 (1<<11) //key1 連接P0.11 #define KEY1 (1<<12) //key1 連接P1.12 #define KEY2 (1<<13) //key1 連接P1.13 #define KEY3 (1<<15) //key1 連接P1.15 #define KEY4 (1<<17) //key1 連接P1.17 uint8 KeyValue,FlagKeyPressed; /****************************************** * 名稱 : void Rst_Wdt(void) * 功能描述: 看門狗喂狗操作 * 輸入?yún)⒘? 無 * 輸出參量: 無 * 調(diào)用子程: 無 * 使用方法: --------------—*/ void Feed_Dog(void) { //uint8 i; WDFEED = 0xAA; //i++; WDFEED = 0x55; //i=0; } /****************************************** * 名稱 : void DelayNS(uint32 dly) * 功能描述: 延時程序 * 輸入?yún)⒘? * 輸出參量: * 調(diào)用子程: * 使用方法: --------------—*/ void DelayNS(uint32 dly) { uint32 i; Feed_Dog(); for(;dly>0;dly--) for(i=0;i<50000;i++); Feed_Dog(); } /****************************************** * 名稱 : int PutCHAR (int ch) * 功能描述: 發(fā)送一個字符 * 輸入?yún)⒘? 無 * 輸出參量: 無 * 調(diào)用子程: 無 * 使用方法: --------------—*/ CHAR PutCHAR (CHAR ch) { if (ch == '\n') { while (!(U0LSR & 0x40)); U0THR = CR; /* OUTPUT CR */ } while (!(U0LSR & 0x40)); return (U0THR = ch); } /****************************************** * 名稱 : void Puthexbyte(int hex) * 功能描述: 將數(shù)據(jù)用16進(jìn)制的格式表示 例如數(shù)據(jù)puthexbyte(0x16)將向串口送出0x31 0x36,如果用串口工具的文本模式將看到"16" * 輸入?yún)⒘? 無 * 輸出參量: 無 * 調(diào)用子程: 無 * 使用方法: --------------—*/ void Puthexbyte(CHAR hex) { CHAR i; i=(hex>>4); if (i<=9) PutCHAR(0x30+i); else PutCHAR (0x37+i); i=(hex&0x0F); if (i<=9) PutCHAR(0x30+i); else PutCHAR (0x37+i); } /****************************************** * 名稱 : void Prints (uint8 *p) * 功能描述: 打印一串字符 * 輸入?yún)⒘? 無 * 輸出參量: 無 * 調(diào)用子程: 無 * 使用方法: --------------—*/ void Prints (CHAR *p) { /* Write string */ while (*p) { PutCHAR (*p++); } } /****************************************** * 名稱 : void Watchdog_Init(void) * 功能描述: 看門狗部分的初始化 * 輸入?yún)⒘? 無 * 輸出參量: 無 * 調(diào)用子程: 無 * 使用方法: --------------—*/ void Watchdog_Init(void) { //WDTC = 0x5F0000; // 設(shè)置WDTC,喂狗重裝值 WDTC = 0x2000000; // 設(shè)置WDTC,喂狗重裝值 WDMOD = 0x03;   |
| 2樓: | >>參與討論 |
| 作者: liaosicong 于 2005/3/10 17:08:00 發(fā)布:
我也遇到這種問題,后來發(fā)現(xiàn)是這個原因 喂狗不能太快,這個可能是PHILIPS的一個bug或一個特殊的地方吧。你隔長一點喂就沒問題了。 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |