feat: added sleep mode

This commit is contained in:
Sergey Yarkov 2022-05-26 15:57:56 +03:00
parent 079637a034
commit 18e6dc460d
3 changed files with 637 additions and 582 deletions

View File

@ -107,16 +107,17 @@ reti ; USI Overflow / inactive
; watchdog time-out interrupt handler ; watchdog time-out interrupt handler
WDT_vect: WDT_vect:
in temp_r_c, WDTCSR
ldi temp_r_c, (1<<WDIE)
out WDTCSR, temp_r_c
inc wdt_counter inc wdt_counter
in temp_r_c, WDTCSR
ori temp_r_c, (1<<WDIE)
out WDTCSR, temp_r_c
reti reti
; pin change on button interrupt handler ; pin change on button interrupt handler
PCINT0_vect: PCINT0_vect:
push r17 push r17
push r18 push r18
clr wdt_counter
in r18, MCUCR in r18, MCUCR
cbr r18, (1<<SE) cbr r18, (1<<SE)
; turn off the sleep mode ; turn off the sleep mode
@ -164,8 +165,8 @@ MCU_Init:
rcall init_ports rcall init_ports
rcall init_interrupts rcall init_interrupts
rcall init_buzzer rcall init_buzzer
rcall init_wdt
rcall init_sm rcall init_sm
; rcall init_wdt
; init important registers for game ; init important registers for game
ldi delay_counter_r, 0xff ldi delay_counter_r, 0xff
@ -190,7 +191,24 @@ MCU_Delay:
rcall delay_1s rcall delay_1s
clr temp_r_b clr temp_r_b
ret ret
WDT_off:
cli
wdr
; clear WDRF in MCUSR
ldi temp_r, (0<<WDRF)
out MCUSR, r16
; write logical one to WDCE and WDE
; keep old prescaler setting to prevent unintentional Watchdog Reset
in temp_r, WDTCSR
ori temp_r, (1<<WDCE)|(1<<WDE)
out WDTCSR, temp_r
; turn off WDT
ldi temp_r, (0<<WDE)
out WDTCSR, temp_r
sei
ret
; program start at reset vector ; program start at reset vector
RESET_vect: RESET_vect:
init_stack_p temp_r, RAMEND init_stack_p temp_r, RAMEND
@ -198,7 +216,20 @@ RESET_vect:
; main program loop ; main program loop
loop: loop:
lds mcu_state_r, CURRENT_STATE_ADDRESS ldi temp_r_c, 20
cp wdt_counter, temp_r_c
brsh _mcu_sleep
rjmp feed
_mcu_sleep:
clr wdt_counter
rcall WDT_off
in temp_r_c, MCUCR
sbr temp_r_c, (1<<SE)
out MCUCR, temp_r_c
cli
sleep
feed:
lds mcu_state_r, CURRENT_STATE_ADDRESS
; init state ; init state
init: init:
cpi mcu_state_r, INIT_STATE cpi mcu_state_r, INIT_STATE
@ -423,18 +454,13 @@ show_sequence:
beep_quit: beep_quit:
rcall delay rcall delay
dec temp_r_b dec temp_r_b
cpi temp_r_b, 0 cpi temp_r_b, 0
brne _sequence_loop brne _sequence_loop
_seq_quit: _seq_quit:
rcall dec_delay_counter rcall dec_delay_counter
rcall delay_50ms rcall delay_50ms
; in temp_r_c, MCUCR
; sbr temp_r_c, (1<<SE)
; out MCUCR, temp_r_c
; sleep
ret ret
; this function need to set the OCR0A register to 0xff for overflow interrupt ; this function need to set the OCR0A register to 0xff for overflow interrupt

View File

@ -1,67 +1,70 @@
:020000020000FC :020000020000FC
:1000000047C0189513C018950CC0189518951895E9 :1000000054C0189513C018950CC0189518951895DC
:100010001895189518951DC0189518951895189548 :100010001895189518951EC0189518951895189547
:100020001895A1B5A0E4A1BDB39418951F932F9383 :100020001895B394A1B5A064A1BD18951F932F9303
:1000300025B72F7D25BF2FB710916000133031F405 :10003000BB2425B72F7D25BF2FB71091600013304B
:1000400019B3107FA1D1109362002FBF2F911F9180 :1000400031F419B3107FB8D1109362002FBF2F91F4
:1000500018957F937FB702C008EA52B7052702952B :100050001F9118957F937FB702C008EA52B7052712
:10006000500F7FBF7F9118956DD15CD161D171D157 :100060000295500F7FBF7F91189584D173D178D1BD
:100070003FEF41E0A2E0AA2EFF27E0E802D078940B :100070008CD187D13FEF41E0A2E0AA2EFF27E0E834
:10008000089573E0FDD07A95E9F795D17727089523 :1000800002D07894089573E013D17A95E9F7ABD153
:100090000FED0DBF0027109361000F9301E0009357 :1000900077270895F894A89500E004BF01B508619A
:1000A00060000F9110916000113041F4DDDF10937A :1000A00001BD00E001BD789408950FED0DBF00275C
:1000B00061000F9302E0009360000F91123041F451 :1000B000109361000F9301E0009360000F91A4E1A1
:1000C00093D0109361000F9303E0009360000F91B1 :1000C000BA1608F407C0BB24E5DFA5B7A062A5BF38
:1000D0001330C1F520916200203E51F40F930EE8D9 :1000D000F894889510916000113041F4C6DF1093B8
:1000E00006BF0F91D89ABA9A2FD0D898BA98F2CF63 :1000E00061000F9302E0009360000F91123041F421
:1000F00020916200203D51F40F9307E406BF0F9159 :1000F00093D0109361000F9303E0009360000F9181
:10010000D99ABA9A21D0D998BA98F2CF20916200A0 :100100001330C1F520916200203E51F40F930EE8A8
:10011000203B51F40F9309E606BF0F91DA9ABA9A81 :1001100006BF0F91D89ABA9A2FD0D898BA98F2CF32
:1001200013D0DA98BA98F2CF20916200203751F4B8 :1001200020916200203D51F40F9307E406BF0F9128
:100130000F9300E506BF0F91DB9ABA9A05D0DB98C2 :10013000D99ABA9A21D0D998BA98F2CF2091620070
:10014000BA98F2CF92D0AECF2F9329D128D127D110 :10014000203B51F40F9309E606BF0F91DA9ABA9A51
:10015000A9B39A2FA07F9F70AA27A09362008191D4 :1001500013D0DA98BA98F2CF20916200203751F488
:10016000981729F42A2D241751F0439510C02F9188 :100160000F9300E506BF0F91DB9ABA9A05D0DB9892
:1001700087D03FEFA2E0AA95AA2E0CD008952F9128 :10017000BA98F2CF92D0A3CF2F9329D128D127D1EB
:1001800000EF0BBBBA980BD1A4D004D008952F91E7 :10018000A9B39A2FA07F9F70AA27A09362008191A4
:1001900008950895FF27E0E8BA9800EF0BBB0BD154 :10019000981729F42A2D241751F0439510C02F9158
:1001A000109361000F9302E0009360000F9141E013 :1001A00087D03FEFA2E0AA95AA2E0CD008952F91F8
:1001B000A39408957A2DDD27C0E8F1D0652F663429 :1001B00000EF0BBBBA980BD1A4D004D008952F91B7
:1001C00030F06C3830F0683C30F06F3F30F0A1E038 :1001C00008950895FF27E0E8BA9800EF0BBB0BD124
:1001D00005C0A2E003C0A4E001C0A8E0A9937A95FD :1001D000109361000F9302E0009360000F9141E0E3
:1001E000703059F700000895E5DF7A2DDD27C0E86B :1001E000A39408957A2DDD27C0E8F1D0652F6634F9
:1001F0007030C1F1A991A13031F0A23079F0A43072 :1001F00030F06C3830F0683C30F06F3F30F0A1E008
:10020000C1F0A83009F10F930EE806BF0F91D89AFC :1002000005C0A2E003C0A4E001C0A8E0A9937A95CC
:10021000BA9AACD0D898BA9828D020C00F9307E4E7 :10021000703059F700000895E5DF7A2DDD27C0E83A
:1002200006BF0F91D99ABA9AA1D0D998BA981DD081 :100220007030C1F1A991A13031F0A23079F0A43041
:1002300015C00F9309E606BF0F91DA9ABA9A96D0C5 :10023000C1F0A83009F10F930EE806BF0F91D89ACC
:10024000DA98BA9812D00AC00F9300E506BF0F9152 :10024000BA9AACD0D898BA9828D020C00F9307E4B7
:10025000DB9ABA9A8BD0DB98BA9807D087D07A9578 :1002500006BF0F91D99ABA9AA1D0D998BA981DD051
:10026000703031F607D09BD008957F937FEF76BF33 :1002600015C00F9309E606BF0F91DA9ABA9A96D095
:100270007F9108953A50383208F008953FEF08957D :10027000DA98BA9812D00AC00F9300E506BF0F9122
:100280001F932F933F934F93F8944BB30F9301EF2A :10028000DB9ABA9A8BD0DB98BA9807D087D07A9548
:100290000BBB0F9184D011E033E020EF110F210F41 :10029000703031F607D09BD008957F937FEF76BF03
:1002A0002BBB7DD03A95C9F70F9308EF0BBB0F918D :1002A0007F9108953A50383208F008953FEF08954D
:1002B00076D018E033E020EF1695210F2BBB6FD0DE :1002B0001F932F933F934F93F8944BB30F9301EFFA
:1002C0003A95C9F778944BBB4F913F912F911F916D :1002C0000BBB0F9184D011E033E020EF110F210F11
:1002D00008950F930EE806BF0F91D89ABA9A5FD08F :1002D0002BBB7DD03A95C9F70F9308EF0BBB0F915D
:1002E0005ED0D898BA980F9309E606BF0F91D99AB5 :1002E00076D018E033E020EF1695210F2BBB6FD0AE
:1002F000BA9A55D054D0D998BA980F9300E506BF52 :1002F0003A95C9F778944BBB4F913F912F911F913D
:100300000F91DA9ABA9A4BD04AD0DA98BA980F93EA :1003000008950F930EE806BF0F91D89ABA9A5FD05E
:1003100007E406BF0F91DB9ABA9A41D040D0DB9830 :100310005ED0D898BA980F9309E606BF0F91D99A84
:10032000BA98089500E10BBF00EF02BB00270895C3 :10032000BA9A55D054D0D998BA980F9300E506BF21
:10033000BA9802E400BF0FEF06BF02E003BF01E07E :100330000F91DA9ABA9A4BD04AD0DA98BA980F93BA
:1003400009BF08950FE00ABB02950BBBBA9AC29889 :1003400007E406BF0F91DB9ABA9A41D040D0DB9800
:10035000089505B7006105BF0895F894A89501B503 :10035000BA98089500E10BBF00EF02BB0027089593
:10036000086101BD0DE401BD789408952F934F936A :10036000BA9802E400BF0FEF06BF02E003BF01E04E
:100370002FEF432F00002A95E9F700004A95D1F7A7 :1003700009BF08950FE00ABB02950BBBBA9AC29859
:1003800000004F912F9108952F933F932AE139EF69 :10038000089505B7006105BF0895F894A89501B5D3
:100390003A95F1F72A95E1F73F912F9108952F9320 :10039000086101BD0DE401BD789408952F934F933A
:1003A0003F9321E43FEE3A95F1F72A95E1F70000FB :1003A0002FEF432F00002A95E9F700004A95D1F777
:1003B0003F912F9108958F939F9324E683EC99E0CA :1003B00000004F912F9108952F933F932AE139EF39
:1003C0000197F1F72A95D1F724E69F918F9108952F :1003C0003A95F1F72A95E1F73F912F9108952F93F0
:1003D0004D656D6F7279206C65642067616D652E67 :1003D0003F9321E43FEE3A95F1F72A95E1F70000CB
:1003E000205772697474656E206279205365726754 :1003E0003F912F9108958F939F9324E683EC99E09A
:1003F0006579205961726B6F762032372E30392E35 :1003F0000197F1F72A95D1F724E69F918F910895FF
:040400003230323133 :100400004D656D6F7279206C65642067616D652E36
:10041000205772697474656E206279205365726723
:100420006579205961726B6F762032372E30392E04
:040430003230323103
:00000001FF :00000001FF

File diff suppressed because it is too large Load Diff