aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/avr8/devices/atmega32c1/words/no-wdt.asm
blob: ff6ddd1b19ea00fcd30bf457b6a99b5497abb958 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
; ( -- ) 
; MCU
; disable watch dog timer at runtime
VE_NOWDT:
    .dw $ff04
    .db "-wdt"
    .dw VE_HEAD
    .set VE_HEAD = VE_NOWDT
XT_NOWDT:
    .dw PFA_NOWDT
PFA_NOWDT:

     in temp1,SREG
     push temp1
     ; Turn always off global interrupt.
     cli
     ; Reset Watchdog Timer
     wdr
     ; Clear WDRF in MCUSR
     in temp1, MCUSR
     andi temp1, (0xff & (0<<WDRF))
     out MCUSR, temp1
     ; Write logical one to WDCE and WDE
     ; Keep old prescaler setting to prevent unintentional time-out
     in_ temp1, WDTCSR
     ori temp1, (1<<WDCE) | (1<<WDE)
     out_ WDTCSR, temp1
     ; Turn off WDT
     ldi temp1, (0<<WDE)
     out_ WDTCSR, temp1
     ; restore status register
     pop temp1
     out SREG,temp1
     jmp_ DO_NEXT