From 67d25d837ac55f28a366c0a3b262e439a6e75fc3 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 19 Aug 2017 12:15:28 +0200 Subject: Add AmForth --- .../avr8/devices/atmega16hvb/words/sleep.asm | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 amforth-6.5/avr8/devices/atmega16hvb/words/sleep.asm (limited to 'amforth-6.5/avr8/devices/atmega16hvb/words/sleep.asm') diff --git a/amforth-6.5/avr8/devices/atmega16hvb/words/sleep.asm b/amforth-6.5/avr8/devices/atmega16hvb/words/sleep.asm new file mode 100644 index 0000000..778fa32 --- /dev/null +++ b/amforth-6.5/avr8/devices/atmega16hvb/words/sleep.asm @@ -0,0 +1,24 @@ +; ( mode -- ) +; MCU +; put the controller into the specified sleep mode +VE_SLEEP: + .dw $ff05 + .db "sleep", 0 + .dw VE_HEAD + .set VE_HEAD = VE_SLEEP +XT_SLEEP: + .dw PFA_SLEEP +PFA_SLEEP: + andi tosl, 7 ; leave only legal mode bits + swap tosl ; move to correct location (bits 6-4, atmega32) + ori tosl, $80 ; set the SE bit (atmega32: bit 7, not bit 0) + out_ MCUCR, tosl ; set the sleep config (atmega32: MCUCR not SMCR) + sleep ; nighty-night +;; the 4 lower bits of MCUCR should not be touched + in_ tosl, MCUCR + andi tosl, $0F + out_ MCUCR, tosl + ;clr tosl ; need to clean up the SMCR reg before we leave + ;out SMCR, tosl ; 0 protects against accidental sleeps + loadtos ; pop argument from stack + jmp DO_NEXT -- cgit v1.2.3