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