valsched: use cbr and sbr.

This commit is contained in:
Martin Preuss
2025-04-26 11:05:27 +02:00
parent 265a1e6043
commit bef677eda4

View File

@@ -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