avr: improved beeper code
dont start beeper already when setting timer because it might be quite some time until the timer is called again which could make the beeper beep an anoyingly long time.
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
beeperSimpleTimer: .byte 1
|
||||
beeperSimpleOnTime: .byte 1
|
||||
beeperSimpleOffTime: .byte 1
|
||||
beeperSimpleRepeat: .byte 1
|
||||
|
||||
|
||||
|
||||
@@ -43,6 +44,7 @@ BeeperSimple_Init:
|
||||
sts beeperSimpleTimer, r16
|
||||
sts beeperSimpleOnTime, r16
|
||||
sts beeperSimpleOffTime, r16
|
||||
sts beeperSimpleRepeat, r16
|
||||
sec
|
||||
ret
|
||||
|
||||
@@ -56,17 +58,32 @@ BeeperSimple_Init:
|
||||
BeeperSimple_Every100ms:
|
||||
lds r16, beeperSimpleTimer
|
||||
tst r16
|
||||
breq BeeperSimple_Every100ms_ret
|
||||
brne BeeperSimple_Every100ms_dec
|
||||
lds r17, beeperSimpleRepeat
|
||||
tst r17
|
||||
brne BeeperSimple_Tick_restartTimer
|
||||
rjmp BeeperSimple_Every100ms_ret
|
||||
BeeperSimple_Every100ms_dec:
|
||||
dec r16
|
||||
brne BeeperSimple_Every100ms_setTimer
|
||||
|
||||
sbis BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; skip next op if beeper is on
|
||||
breq BeeperSimple_Every100ms_zero
|
||||
rjmp BeeperSimple_Every100ms_setTimer
|
||||
BeeperSimple_Every100ms_zero:
|
||||
sbis BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; skip next op if BEEPER is on
|
||||
rjmp BeeperSimple_Tick_isOff
|
||||
; is on
|
||||
cbi BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; off
|
||||
lds r16, beeperSimpleOffTime
|
||||
rjmp BeeperSimple_Every100ms_setTimer
|
||||
BeeperSimple_Tick_isOff:
|
||||
lds r16, beeperSimpleRepeat
|
||||
tst r16
|
||||
breq BeeperSimple_Every100ms_setTimer ; no repeat, go stop timer
|
||||
dec r16
|
||||
sts beeperSimpleRepeat, r16
|
||||
brne BeeperSimple_Tick_restartTimer
|
||||
; repeat counter reached 0, stop timer
|
||||
rjmp BeeperSimple_Every100ms_setTimer
|
||||
BeeperSimple_Tick_restartTimer:
|
||||
sbi BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; on
|
||||
lds r16, beeperSimpleOnTime
|
||||
BeeperSimple_Every100ms_setTimer:
|
||||
@@ -77,24 +94,39 @@ BeeperSimple_Every100ms_ret:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine BeeperSimple_BeepShort @global
|
||||
;
|
||||
; Short beep.
|
||||
;
|
||||
; @clobbers R18, R19, R20
|
||||
|
||||
BeeperSimple_BeepShort:
|
||||
ldi r18, 2
|
||||
ldi r19, 1
|
||||
ldi r20, 1
|
||||
rjmp BeeperSimple_SetTiming
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine BeeperSimple_SetTiming @global
|
||||
;
|
||||
; Set blinking timing for LED. Switch LED on.
|
||||
; @param r18 ontime (in 1/10s)
|
||||
; @param r19 offtime (in 1/10s)
|
||||
; @clobbers none
|
||||
; @param r20 repeat counter
|
||||
; @clobbers r16
|
||||
;
|
||||
|
||||
BeeperSimple_SetTiming:
|
||||
cbi BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; off
|
||||
sts beeperSimpleOnTime, r18
|
||||
sts beeperSimpleTimer, r18
|
||||
sts beeperSimpleOffTime, r19
|
||||
tst r18
|
||||
breq BeeperSimple_SetTiming_ret
|
||||
sbi BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; on
|
||||
BeeperSimple_SetTiming_ret:
|
||||
sts beeperSimpleRepeat, r20
|
||||
clr r16
|
||||
sts beeperSimpleTimer, r16
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user