valsched: use cbr and sbr.
This commit is contained in:
@@ -86,13 +86,13 @@ ValueScheduler_Every100ms:
|
|||||||
; interval finished, check for repeat
|
; interval finished, check for repeat
|
||||||
ldd r17, Y+VALSCHED_OFFS_FLAGS
|
ldd r17, Y+VALSCHED_OFFS_FLAGS
|
||||||
clr r16
|
clr r16
|
||||||
sbrs r16, VALSCHED_FLAGS_REPEAT_BIT
|
sbrs r17, VALSCHED_FLAGS_REPEAT_BIT
|
||||||
dec r17 ; bit not set, stop counter after this interval
|
dec r16 ; bit not set, stop counter after this interval
|
||||||
std Y+VALSCHED_OFFS_TIMER, r17
|
std Y+VALSCHED_OFFS_TIMER, r16
|
||||||
rjmp ValueScheduler_Every100ms_end
|
rjmp ValueScheduler_Every100ms_end
|
||||||
ValueScheduler_Every100ms_setSendFlag:
|
ValueScheduler_Every100ms_setSendFlag:
|
||||||
ldd r16, Y+VALSCHED_OFFS_FLAGS
|
ldd r16, Y+VALSCHED_OFFS_FLAGS
|
||||||
ori r16, (1<<VALSCHED_FLAGS_TOSEND_BIT)
|
sbr r16, (1<<VALSCHED_FLAGS_TOSEND_BIT)
|
||||||
std Y+VALSCHED_OFFS_FLAGS, r16
|
std Y+VALSCHED_OFFS_FLAGS, r16
|
||||||
ValueScheduler_Every100ms_end:
|
ValueScheduler_Every100ms_end:
|
||||||
ret
|
ret
|
||||||
@@ -111,10 +111,9 @@ ValueScheduler_Every100ms_end:
|
|||||||
|
|
||||||
ValueScheduler_CheckSend:
|
ValueScheduler_CheckSend:
|
||||||
ldd r16, Y+VALSCHED_OFFS_FLAGS
|
ldd r16, Y+VALSCHED_OFFS_FLAGS
|
||||||
andi r16, (1<<VALSCHED_FLAGS_TOSEND_BIT)
|
|
||||||
breq ValueScheduler_CheckSend_end
|
|
||||||
sec
|
sec
|
||||||
ValueScheduler_CheckSend_end:
|
sbrs r16, VALSCHED_FLAGS_TOSEND_BIT
|
||||||
|
clc
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
@@ -130,7 +129,7 @@ ValueScheduler_CheckSend_end:
|
|||||||
|
|
||||||
ValueScheduler_MarkSent:
|
ValueScheduler_MarkSent:
|
||||||
ldd r16, Y+VALSCHED_OFFS_FLAGS
|
ldd r16, Y+VALSCHED_OFFS_FLAGS
|
||||||
andi r16, ~(1<<VALSCHED_FLAGS_TOSEND_BIT)
|
cbr r16, (1<<VALSCHED_FLAGS_TOSEND_BIT)
|
||||||
std Y+VALSCHED_OFFS_FLAGS, r16
|
std Y+VALSCHED_OFFS_FLAGS, r16
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
@@ -147,32 +146,38 @@ ValueScheduler_MarkSent:
|
|||||||
; @clobbers r17
|
; @clobbers r17
|
||||||
|
|
||||||
ValueScheduler_SetValue:
|
ValueScheduler_SetValue:
|
||||||
mov r17, r16
|
clr r17
|
||||||
rcall ValueScheduler_GetValue
|
tst r16
|
||||||
|
breq ValueScheduler_SetValue_reduced
|
||||||
|
inc r17
|
||||||
|
ValueScheduler_SetValue_reduced:
|
||||||
|
rcall ValueScheduler_GetValue ; R16=current value (none)
|
||||||
cp r17, r16
|
cp r17, r16
|
||||||
breq ValueScheduler_SetValue_end
|
breq ValueScheduler_SetValue_end
|
||||||
; value changed
|
; value changed
|
||||||
mov r16, r17
|
tst r17
|
||||||
tst r16
|
|
||||||
breq ValueScheduler_SetValue_set0
|
breq ValueScheduler_SetValue_set0
|
||||||
; set 1
|
; set 1
|
||||||
ldd r17, Y+VALSCHED_OFFS_FLAGS
|
ldd r17, Y+VALSCHED_OFFS_FLAGS
|
||||||
ori r17, (1<<VALSCHED_FLAGS_REPEAT_BIT) ; set repeat bit
|
sbr r17, (1<<VALSCHED_FLAGS_REPEAT_BIT) ; set repeat bit
|
||||||
sbrs r17, VALSCHED_FLAGS_REPEAT1_BIT
|
sbrs r17, VALSCHED_FLAGS_REPEAT1_BIT
|
||||||
andi r17, ~(1<<VALSCHED_FLAGS_REPEAT_BIT) ; clear repeat bit if not wanted for "1"
|
cbr r17, (1<<VALSCHED_FLAGS_REPEAT_BIT) ; clear repeat bit if not wanted for "1"
|
||||||
ori r17, (1<<VALSCHED_FLAGS_VALUE_BIT) ; 1: set value bit and repeat bit
|
sbr r17, (1<<VALSCHED_FLAGS_VALUE_BIT) ; 1: set value bit
|
||||||
std Y+VALSCHED_OFFS_FLAGS, r17 ; store new byte
|
std Y+VALSCHED_OFFS_FLAGS, r17 ; store new byte
|
||||||
rjmp ValueScheduler_SetValue_resetTimer
|
rjmp ValueScheduler_SetValue_resetTimer
|
||||||
ValueScheduler_SetValue_set0:
|
ValueScheduler_SetValue_set0:
|
||||||
ldd r17, Y+VALSCHED_OFFS_FLAGS
|
ldd r17, Y+VALSCHED_OFFS_FLAGS
|
||||||
ori r17, (1<<VALSCHED_FLAGS_REPEAT_BIT)
|
sbr r17, (1<<VALSCHED_FLAGS_REPEAT_BIT)
|
||||||
sbrs r17, VALSCHED_FLAGS_REPEAT0_BIT
|
sbrs r17, VALSCHED_FLAGS_REPEAT0_BIT
|
||||||
andi r17, ~(1<<VALSCHED_FLAGS_REPEAT_BIT) ; clear repeat bit if not wanted for "0"
|
cbr r17, (1<<VALSCHED_FLAGS_REPEAT_BIT) ; clear repeat bit if not wanted for "0"
|
||||||
andi r17, ~(1<<VALSCHED_FLAGS_VALUE_BIT) ; 0: clear value bit and repeat bit
|
cbr r17, (1<<VALSCHED_FLAGS_VALUE_BIT) ; 0: clear value bit
|
||||||
std Y+VALSCHED_OFFS_FLAGS, r17 ; store new byte
|
std Y+VALSCHED_OFFS_FLAGS, r17 ; store new byte
|
||||||
ValueScheduler_SetValue_resetTimer:
|
ValueScheduler_SetValue_resetTimer:
|
||||||
clr r17 ; reset timer
|
clr r17 ; reset timer
|
||||||
std Y+VALSCHED_OFFS_TIMER, r17
|
std Y+VALSCHED_OFFS_TIMER, r17
|
||||||
|
; ldd r16, Y+VALSCHED_OFFS_FLAGS ; reset TOSEND flag
|
||||||
|
; cbr r16, (1<<VALSCHED_FLAGS_TOSEND_BIT)
|
||||||
|
; std Y+VALSCHED_OFFS_FLAGS, r16
|
||||||
ValueScheduler_SetValue_end:
|
ValueScheduler_SetValue_end:
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
@@ -190,8 +195,7 @@ ValueScheduler_SetValue_end:
|
|||||||
|
|
||||||
ValueScheduler_GetValue:
|
ValueScheduler_GetValue:
|
||||||
ldd r16, Y+VALSCHED_OFFS_FLAGS
|
ldd r16, Y+VALSCHED_OFFS_FLAGS
|
||||||
lsr r16, VALSCHED_FLAGS_VALUE_BIT
|
andi r16, 1 ; CAVE: assumes data bit is bit0!!
|
||||||
andi r16, 1
|
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user