diff --git a/avr/modules/valsched/main.asm b/avr/modules/valsched/main.asm index 4dbf782..1d01f16 100644 --- a/avr/modules/valsched/main.asm +++ b/avr/modules/valsched/main.asm @@ -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<