二十五.关闭看门狗

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
	


	


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值