valsched: only repeat values in first loop.
This commit is contained in:
@@ -11,15 +11,16 @@
|
||||
; ***************************************************************************
|
||||
; defines
|
||||
|
||||
.equ VALSCHED_OFFS_TIMER = 0
|
||||
.equ VALSCHED_OFFS_FLAGS = 1
|
||||
.equ VALSCHED_DATA_SIZE = 2
|
||||
.equ VALSCHED_OFFS_TIMER = 0
|
||||
.equ VALSCHED_OFFS_FLAGS = 1
|
||||
.equ VALSCHED_DATA_SIZE = 2
|
||||
|
||||
.equ VALSCHED_FLAGS_VALUE_BIT = 0
|
||||
.equ VALSCHED_FLAGS_TOSEND_BIT = 1
|
||||
.equ VALSCHED_FLAGS_REPEAT_BIT = 2
|
||||
.equ VALSCHED_FLAGS_REPEAT0_BIT = 6
|
||||
.equ VALSCHED_FLAGS_REPEAT1_BIT = 7
|
||||
.equ VALSCHED_FLAGS_VALUE_BIT = 0
|
||||
.equ VALSCHED_FLAGS_TOSEND_BIT = 1
|
||||
.equ VALSCHED_FLAGS_REPEAT_BIT = 2
|
||||
.equ VALSCHED_FLAGS_FIRSTLOOP_BIT = 3
|
||||
.equ VALSCHED_FLAGS_REPEAT0_BIT = 6
|
||||
.equ VALSCHED_FLAGS_REPEAT1_BIT = 7
|
||||
|
||||
.equ VALSCHED_REPORTTIME1 = 1 ; report after 100ms
|
||||
.equ VALSCHED_REPORTTIME2 = 11 ; report after 1100ms
|
||||
@@ -71,20 +72,26 @@ ValueScheduler_Fini:
|
||||
; @clobbers r16, r17
|
||||
|
||||
ValueScheduler_Every100ms:
|
||||
ldd r17, Y+VALSCHED_OFFS_FLAGS
|
||||
ldd r16, Y+VALSCHED_OFFS_TIMER
|
||||
inc r16
|
||||
breq ValueScheduler_Every100ms_end ; timer on hold
|
||||
breq ValueScheduler_Every100ms_end ; timer on hold
|
||||
std Y+VALSCHED_OFFS_TIMER, r16
|
||||
cpi r16, VALSCHED_REPORTTIME1
|
||||
breq ValueScheduler_Every100ms_setSendFlag
|
||||
sbrs r17, VALSCHED_FLAGS_FIRSTLOOP_BIT
|
||||
rjmp ValueScheduler_Every100ms_checkInterval ; jump if not first round
|
||||
cpi r16, VALSCHED_REPORTTIME2
|
||||
breq ValueScheduler_Every100ms_setSendFlag
|
||||
cpi r16, VALSCHED_REPORTTIME3
|
||||
breq ValueScheduler_Every100ms_setSendFlag
|
||||
ValueScheduler_Every100ms_checkInterval:
|
||||
cpi r16, VALSCHED_INTERVAL
|
||||
brne ValueScheduler_Every100ms_end
|
||||
brcs ValueScheduler_Every100ms_end
|
||||
; interval finished, check for repeat
|
||||
ldd r17, Y+VALSCHED_OFFS_FLAGS
|
||||
cbr r17, (1<<VALSCHED_FLAGS_FIRSTLOOP_BIT) ; not first loop
|
||||
std Y+VALSCHED_OFFS_FLAGS, r17
|
||||
clr r16
|
||||
sbrs r17, VALSCHED_FLAGS_REPEAT_BIT
|
||||
dec r16 ; bit not set, stop counter after this interval
|
||||
@@ -159,6 +166,8 @@ ValueScheduler_SetValue_reduced:
|
||||
breq ValueScheduler_SetValue_set0
|
||||
; set 1
|
||||
ldd r17, Y+VALSCHED_OFFS_FLAGS
|
||||
sbr r17, (1<<VALSCHED_FLAGS_FIRSTLOOP_BIT) ; mark first loop
|
||||
|
||||
sbr r17, (1<<VALSCHED_FLAGS_REPEAT_BIT) ; set repeat bit
|
||||
sbrs r17, VALSCHED_FLAGS_REPEAT1_BIT
|
||||
cbr r17, (1<<VALSCHED_FLAGS_REPEAT_BIT) ; clear repeat bit if not wanted for "1"
|
||||
@@ -167,6 +176,7 @@ ValueScheduler_SetValue_reduced:
|
||||
rjmp ValueScheduler_SetValue_resetTimer
|
||||
ValueScheduler_SetValue_set0:
|
||||
ldd r17, Y+VALSCHED_OFFS_FLAGS
|
||||
sbr r17, (1<<VALSCHED_FLAGS_FIRSTLOOP_BIT) ; mark first loop
|
||||
sbr r17, (1<<VALSCHED_FLAGS_REPEAT_BIT)
|
||||
sbrs r17, VALSCHED_FLAGS_REPEAT0_BIT
|
||||
cbr r17, (1<<VALSCHED_FLAGS_REPEAT_BIT) ; clear repeat bit if not wanted for "0"
|
||||
|
||||
Reference in New Issue
Block a user