DSP

二十五.关闭看门狗

2019-07-13 15:17发布

1.嵌入式系统可能运行在无人看守的环境,有可能会意外死机,但是鉴于无人看守,所以需要一种自动重启的硬件机制---看门狗
2.看门狗原理图
3.原理: (1)PCLK经过预分频器以及选择器以后会产生看门狗时钟,然后通过计数逻辑模块,开始计数。
(2)WTDAT是预先存放的计数初值,WTCNT是减量计数模块,当WTCNT从WTDAT的值减到0的时候,如果还没有更新WTDAT,则认为没有喂狗,系统死机,
(3)发出reset  信号,强制系统重启
(4)在初始化阶段,我们认为代码少,系统也不会进入死机状态,为了节约开销,避免无休止的喂狗,所以关闭看门狗。
4.代码 (注意6410要先初始化外设基地址) @外设地址初始化,要放在进入svc模式以后的第一步操作 set_peri_port: ldr r0, =0x70000000 @对于6410来说,内存(0x00000000~0x60000000),外设(0x70000000-0x7fffffff) orr r0, r0, #0x13 @外设大小:256M mcr p15,0,r0,c15,c2,4 @把r0的值(包括了外设基地址+外设大小)告诉cpu mov pc, lr @关闭看门狗 #define pWTCON 0x7E004000 disable_watchdog: ldr r0, =pWTCON mov r1, #0x00 str r1, [r0] mov pc, lr
完整代码
@**************************** @File:start.S @ @Tiny6410裸机上学期代码 @**************************** .text .global _start @异常向量表 _start: b reset ldr pc, _Undefined_instruction ldr pc, _Software_interrupt ldr pc, _Command_abort ldr pc, _Data_abort ldr pc, _Nothing_used ldr pc, _IRQ ldr pc, _FIQ @存放实际异常入口地址开辟的存储单元 _Undefined_instruction: .word Undefined_instruction _Software_interrupt: .word Software_interrupt _Command_abort: .word Command_abort _Data_abort: .word Data_abort _Nothing_used: .word Nothing_used _IRQ: .word IRQ _FIQ: .word FIQ @各种实际的异常处理函数 Undefined_instruction: nop Software_interrupt: nop Command_abort: nop Data_abort: nop Nothing_used: nop IRQ: nop FIQ: nop @上电复位以后就执行这里 reset: bl set_svc bl set_peri_port bl disable_watchdog @外设地址初始化,要放在进入svc模式以后的第一步操作 set_peri_port: ldr r0, =0x70000000 @对于6410来说,内存(0x00000000~0x60000000),外设(0x70000000-0x7fffffff) orr r0, r0, #0x13 @外设大小:256M mcr p15,0,r0,c15,c2,4 @把r0的值(包括了外设基地址+外设大小)告诉cpu mov pc, lr @通过读-修改-写的方式控制CPSR从而改变工作模式的svc模式 set_svc: mrs r0, cpsr bic r0,r0,#0x1F orr r0,r0,#0xD3 msr cpsr, r0 mov pc, lr @关闭看门狗 #define pWTCON 0x7E004000 disable_watchdog: ldr r0, =pWTCON mov r1, #0x00 str r1, [r0] mov pc, lr