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
|
beeperSimpleTimer: .byte 1
|
||||||
beeperSimpleOnTime: .byte 1
|
beeperSimpleOnTime: .byte 1
|
||||||
beeperSimpleOffTime: .byte 1
|
beeperSimpleOffTime: .byte 1
|
||||||
|
beeperSimpleRepeat: .byte 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -43,6 +44,7 @@ BeeperSimple_Init:
|
|||||||
sts beeperSimpleTimer, r16
|
sts beeperSimpleTimer, r16
|
||||||
sts beeperSimpleOnTime, r16
|
sts beeperSimpleOnTime, r16
|
||||||
sts beeperSimpleOffTime, r16
|
sts beeperSimpleOffTime, r16
|
||||||
|
sts beeperSimpleRepeat, r16
|
||||||
sec
|
sec
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@@ -56,17 +58,32 @@ BeeperSimple_Init:
|
|||||||
BeeperSimple_Every100ms:
|
BeeperSimple_Every100ms:
|
||||||
lds r16, beeperSimpleTimer
|
lds r16, beeperSimpleTimer
|
||||||
tst r16
|
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
|
dec r16
|
||||||
brne BeeperSimple_Every100ms_setTimer
|
breq BeeperSimple_Every100ms_zero
|
||||||
|
rjmp BeeperSimple_Every100ms_setTimer
|
||||||
sbis BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; skip next op if beeper is on
|
BeeperSimple_Every100ms_zero:
|
||||||
|
sbis BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; skip next op if BEEPER is on
|
||||||
rjmp BeeperSimple_Tick_isOff
|
rjmp BeeperSimple_Tick_isOff
|
||||||
; is on
|
; is on
|
||||||
cbi BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; off
|
cbi BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; off
|
||||||
lds r16, beeperSimpleOffTime
|
lds r16, beeperSimpleOffTime
|
||||||
rjmp BeeperSimple_Every100ms_setTimer
|
rjmp BeeperSimple_Every100ms_setTimer
|
||||||
BeeperSimple_Tick_isOff:
|
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
|
sbi BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; on
|
||||||
lds r16, beeperSimpleOnTime
|
lds r16, beeperSimpleOnTime
|
||||||
BeeperSimple_Every100ms_setTimer:
|
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
|
; @routine BeeperSimple_SetTiming @global
|
||||||
;
|
;
|
||||||
; Set blinking timing for LED. Switch LED on.
|
; Set blinking timing for LED. Switch LED on.
|
||||||
; @param r18 ontime (in 1/10s)
|
; @param r18 ontime (in 1/10s)
|
||||||
; @param r19 offtime (in 1/10s)
|
; @param r19 offtime (in 1/10s)
|
||||||
; @clobbers none
|
; @param r20 repeat counter
|
||||||
|
; @clobbers r16
|
||||||
;
|
;
|
||||||
|
|
||||||
BeeperSimple_SetTiming:
|
BeeperSimple_SetTiming:
|
||||||
cbi BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; off
|
cbi BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; off
|
||||||
sts beeperSimpleOnTime, r18
|
sts beeperSimpleOnTime, r18
|
||||||
sts beeperSimpleTimer, r18
|
|
||||||
sts beeperSimpleOffTime, r19
|
sts beeperSimpleOffTime, r19
|
||||||
tst r18
|
sts beeperSimpleRepeat, r20
|
||||||
breq BeeperSimple_SetTiming_ret
|
clr r16
|
||||||
sbi BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; on
|
sts beeperSimpleTimer, r16
|
||||||
BeeperSimple_SetTiming_ret:
|
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user