📄 wdtrun.s
字号:
;******************************************************************************
; File:WDTRUN.S
; 功能:运行WDT,由KEY1键控制程序不喂狗,实现WDT复位操作。
; 说明:将跳线器JP8_LED4短接。
;******************************************************************************
INCLUDE LPC2106.INC
LED4CON EQU 0x00002000 ; P0.13引脚控制LED4,低电平点亮
KEY1 EQU 0x00004000 ; P0.14引脚连接KEY1
AREA WDTRUNC,CODE,READONLY
ENTRY
CODE32
MAIN LDR SP,=0x40003000 ; 设置堆栈指针SP
LDR R0,=IODIR ; 设置LED控制口为输出,而KEY1控制口为输入
MOV R1,#LED4CON
STR R1,[R0]
; 控制LED快速闪烁50次,以便指示系统复位
MOV R5,#50
LEDSET LDR R1,=LED4CON
LDR R0,=IOSET
STR R1,[R0] ; LED4控制的I/O置位,即LED4熄灭
BL DELAYUS
LEDCLR LDR R0,=IOCLR
STR R1,[R0] ; LED4控制的I/O复位,即LED4点亮
BL DELAYUS
SUBS R5,R5,#1
BNE LEDSET
; 设置并启动WDT
LDR R0,=WDOG_BASE
MOV R1,#0xFF000 ; 设置WDTC,喂狗重装值
STR R1,[R0,#0x04]
MOV R1,#0x03 ; 设置WDT工作模式,WDMOD
STR R1,[R0]
BL RSTWDT ; 进行喂狗操作
; 正常操作显示(LED4闪烁),若按住KEY1键,则不进行喂狗处理
MAIN_LOOP LDR R1,=LED4CON
LDR R0,=IOSET
STR R1,[R0] ; LED4控制的I/O置位,即LED4熄灭
BL DELAYS
LDR R0,=IOCLR
STR R1,[R0] ; LED4控制的I/O复位,即LED4点亮
BL DELAYS
LDR R0,=IOPIN
WAITKEY1 LDR R1,[R0] ; 若按住KEY1键,则一直循环等待放开
ANDS R1,R1,#KEY1 ; 若WDT溢出复位,则LED4立即熄灭
BEQ WAITKEY1
B MAIN_LOOP
;******************************************************************************
; 名称:RSTWDT
; 功能:清WDT
; 入口参数:无
; 出口参数:无
; 占用资源:R0、R1
;******************************************************************************
RSTWDT
LDR R0,=WDFEED
MOV R1,#0xAA
STR R1,[R0]
MOV R1,#0x55
STR R1,[R0]
MOV PC,LR
;******************************************************************************
; 名称:DELAYS
; 功能:短软件延时
; 入口参数:无
; 出口参数:无
; 占用资源:R7
;******************************************************************************
DELAYUS
MOV R7,#0xF000 ; 延时参数
DELAYUS_L1 SUBS R7,R7,#1 ; R7 = R7-1
BNE DELAYUS_L1 ; 判断R7-1结果是否为0,若不为0则跳转
MOV PC,LR ; 返回
;******************************************************************************
; 名称:DELAYS
; 功能:软件延时。并具有清WDT指令。
; 入口参数:无
; 出口参数:无
; 占用资源:R7
;******************************************************************************
DELAYS
STMFD SP!,{R0-R7,LR} ; 保存参数
MOV R7,#0x1F000 ; 延时参数
DELAYS_L1 BL RSTWDT
SUBS R7,R7,#1 ; R7 = R7-1
BNE DELAYS_L1 ; 判断R7-1结果是否为0,若不为0则跳
LDMFD SP!,{R0-R7,PC} ; 返回
ALIGN ; 数据字对齐
LTORG ; 声明文字池
END
;系统正常运行时,LED4闪烁,若按住KEY1键,程序将不进行喂狗操作,则WDT溢出而复位系统。
;在使用JTAG进行调试时,可以检查0xE0000000地址(WDMOD寄存器)处的内容,判断是其WDTOF标
;志是否置位。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -