|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
KEIL ARM中看门狗喂狗一定要关中断吗?不关有多大影响? |
作者:pubstar 栏目:ARM技术 |
一次喂不成功,还有下一次,在实际应用中,一个复位周期中,喂狗的次数应是足够多。 如果一个复位周期内喂狗次数足够多,全部喂不上的概率有多大? cpu_sr=DisableInterrupt(); WDFEED=0xaa; WDFEED=0x55; EnableInterrupt(cpu_sr); 在上面的程序中,如果不进行开关中断,每次喂狗程序至少少执行上百条指令。 U32 DisableInterrupt(void) __swi(9) __arm { __asm { MRS R1, SPSR ORR R0, R1, #0xc0 MSR SPSR_c, R0 LDR R0,=Interrupt_cpu_sr STR R1,[R0,#0x0] } return Interrupt_cpu_sr; } /* ---------------------------------------------------------------------------- 函数名: EnableInterrupt 功能: 使能中断 入口: 无 出口: 无 */ void EnableInterrupt(U32 cpu_sr) __swi(8) __arm { cpu_sr=cpu_sr; __asm { MSR SPSR_c, R0 } /***********************************************************************/ /* This file is PART of the CA ARM C Compiler PACKAGE */ /* COPYRIGHT KEIL ELEKTRONIK GmbH 2002 - 2004 */ /***********************************************************************/ /* */ /* SWI_VEC.S: Pre-defined vectored interrupt handler SWI interrupt */ /* */ /***********************************************************************/ AREA ?C?SWI, CODE, READONLY, ALIGN=2 PUBLIC SWI_Handler?A, ?SWI?Table, ?SWI?Empty SWI_Handler?A PROC CODE32 STMFD SP!,{LR} ; Store LR register MRS R8,SPSR TST R8,#0x20 ; SWI call from LDRNEH R8,[LR,#-2] ; Thumb: Load halfword instruction ANDNE R8,R8,#0xFF ; extract SWI NUMBER LDREQ R8,[LR,#-4] ; ARM: Load word instruction BICEQ R8,R8,#0xFF000000 ; extract SWI NUMBER ; R4 now contains SWI NUMBER ; SWI Handler ; LDR R12,[PC,#(?SWI?Table-$-8)] ; Maximum NUMBER of interrupts ; LDR R12,[PC,#0x24] ; Maximum NUMBER of interrupts ADR R12,?SWI?Table LDR R12,[R12] ; load last SWI-Function-NUMBER CMP R8,R12 BGT ?SWI?Empty ; overflow ADR R12,?SWI?Table+4 LDR R12,[R12,R8,LSL #2]; SWI function address MOV LR,PC ; Return address BX R12 ; Call SWI function LDMFD SP!,{PC}^ ; Return ?SWI?Empty: B $ ; no existing SWI ; *** DO NOT MODIFY THIS PORTION OF THE FILE *** ?SWI?Table: ; Marker for LA Linker ; ; The LA Linker inserts at this label ; DD 0 & |
2楼: | >>参与讨论 |
作者: hyhmh 于 2006/3/22 8:54:00 发布:
喂狗不正确(包括时序),狗也咬人 Once 0xAA is written to the WDFEED register the next operation in the Watchdog register space should be a WRITE (0x55) to the WDFFED egister otherwise the watchdog is triggered. The interrupt/reset will be generated during the second PCLK following an incorrect access to a watchdog timer register during a feed sequence. 。 老周文档的对应翻译: 向WDFEED寄存器写入0xAA 的下一个操作应当是向WDFEED 寄存器写入0x55,除非看门狗被触发。在一个喂狗时序中,一次对看门狗定时器寄存器不正确的访问之后第二个pclk 周期将产生中断/复位。 |
3楼: | >>参与讨论 |
作者: SMARTCODE 于 2006/3/22 15:50:00 发布:
纠正一下,应该把“除非”换成“否则”。不然有歧义。 |
4楼: | >>参与讨论 |
作者: liuhuai 于 2006/3/22 16:35:00 发布:
一定得关 一定得关,不关中断,系统复位 |
5楼: | >>参与讨论 |
作者: hjf8031 于 2006/3/22 17:25:00 发布:
一定得关! 用了就知道,LPC-ARM不少增强功能是要关中断的. |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |