看门狗
一般的MCU都有看门狗模块,用于在系统异常出错时,复位MCU.VRS3074也一样,提供看门狗模块,它是由对系统预分频的14位定时器
组成.只有一个寄存器用来控制看门狗:WDTCFG,它包含了分频设置,操作模式以及复位设置.下面的例子是一个运行在系统内部时钟
40M情况下的演示,它每隔40MS复位一下看门狗.
Include
x db 0
CPTR db 0
start:
mov PERIPHEN1 ,#01h ;Enable Timer 0
mov P1PINCFG , #00h ;Config port 1 as output
mov a,DEVCLKCFG1
anl a,#0F0h ;Force Maximum clock speed
mov a,PERIPHEN2
orl a,#04h
mov P1 , #0FFh ;Set P1 to output 0xFF
lcall delay10
mov WDTCFG , #62h ;Configure and Reset the
Watchdog Timer
mov WDTCFG , #63h ;Bit 7:4 = WDTPERIOD : Define
the timeout
mov P1 , #00h ;Clear P1
LOOP1:
lcall delay40
mov WDTCFG , #62h ;Reset the Watchdog Timer
mov WDTCFG , #63h
ajmp LOOP1
delay40:
mov x , PERIPHEN1 ;Load PERIPHEN1 register
mov a, x
orl a,#01h ;Enable Timer 0
mov PERIPHEN1 , x;
mov r0 , 40;
LOOP2:
mov TH0 ,#63h ;Timer 0 Reload value for 1MS at
40MHZ
mov TL0 , #0C0h
mov T0T1CLKCFG , #00h ;No prescaler for Timer 0
clock
mov T0CON , #04h ;Start Timer0 Count-up
LOOP3:
mov x,T0CON;
mov a,x
anl a,#80h
mov x,a
jz LOOP3
mov T0CON , #00h ;Stop Timer 0
djnz r0,LOOP2
mov x , PERIPHEN1; ;Load PERIPHEN1 register
mov a, x
anl a,#0FEh ;Disable Timer 0
mov x,a
mov PERIPHEN1 , x;
ret
delay10:
mov r0,10
LOOP4:
lcall delay
djnz r0,LOOP4
ret
delay:
MOV CPTR,#1
MOV A,PERIPHEN1 ;LOAD PERIPHEN1 REG
ORL A,#00000001B ;ENABLE TIMER 0
MOV PERIPHEN1,A
DELAY1MSLP:
MOV TH0,#063H ; 6TIMER0 RELOAD VALUE FOR 1MS AT
40MHZ
MOV TL0,#0C0H
MOV T0T1CLKCFG,#00H ;NO PRESCALER FOR TIMER 0
CLOCK
MOV T0CON,#00000100B ;START TIMER 0, COUNT UP
DWAITOVT0:
MOV A,T0CON ;READ TIMER 0 CONTROL, WAIT FOR
OVERFLOW
ANL A,#080H ;ISOLATE TIMER OVERFLOW FLAG
JZ DWAITOVT0 ;LOOP AS LONG AS TIMER 0 DONT
OVERFLOW
MOV T0CON,#00H ;STOP TIMER 0
DJNZ CPTR,DELAY1MSLP ;
MOV A,PERIPHEN1 ;LOAD PERIPHEN1 REG
ANL A,#11111110B ;DISABLE TIMER 0
MOV PERIPHEN1,A
RET
至此,对VRS3074MCU所提供的模块,进行汇编的分析文章基本收尾,遗憾的是没有在实际硬件上进行验证,只是理论分析,希望以后有机会
尝试验证.