avr: use 2 byte counter for f_keepup.

This commit is contained in:
Martin Preuss
2025-05-01 00:57:48 +02:00
parent ab9c177793
commit de89bc94b6

View File

@@ -11,9 +11,11 @@
; *************************************************************************** ; ***************************************************************************
; defines ; defines
.equ FILTER_KEEPUP_OFFS_TIMER = 0 .equ FILTER_KEEPUP_OFFS_TIMER_LOW = 0
.equ FILTER_KEEPUP_OFFS_RESTARTVALUE = 1 .equ FILTER_KEEPUP_OFFS_TIMER_HIGH = 1
.equ FILTER_KEEPUP_DATA_SIZE = 2 .equ FILTER_KEEPUP_OFFS_RESTARTVALUE_LOW = 2
.equ FILTER_KEEPUP_OFFS_RESTARTVALUE_HIGH = 3
.equ FILTER_KEEPUP_DATA_SIZE = 4
@@ -32,7 +34,8 @@
FilterKeepUp_Init: FilterKeepUp_Init:
clr r16 clr r16
std Y+FILTER_KEEPUP_OFFS_TIMER, r16 std Y+FILTER_KEEPUP_OFFS_TIMER_LOW, r16
std Y+FILTER_KEEPUP_OFFS_TIMER_HIGH, r16
ret ret
; @end ; @end
@@ -54,12 +57,28 @@ FilterKeepUp_Fini:
; @routine FilterKeepUp_GetValue @global ; @routine FilterKeepUp_GetValue @global
; ;
; @param Y pointer to filter data ; @param Y pointer to filter data
; @return R16 value ; @return R17:R16 value
; @clobbers none ; @clobbers none
FilterKeepUp_SetRestartValue:
std Y+FILTER_KEEPUP_OFFS_RESTARTVALUE_LOW, r16
std Y+FILTER_KEEPUP_OFFS_RESTARTVALUE_HIGH, r17
ret
; @end
; ---------------------------------------------------------------------------
; @routine FilterKeepUp_GetValue @global
;
; @param Y pointer to filter data
; @return R16 value
; @clobbers R17
FilterKeepUp_GetValue: FilterKeepUp_GetValue:
ldd r16, Y+FILTER_KEEPUP_OFFS_TIMER ldd r16, Y+FILTER_KEEPUP_OFFS_TIMER_LOW
tst r16 ldd r17, Y+FILTER_KEEPUP_OFFS_TIMER_HIGH
or r16, r17
breq FilterKeepUp_GetValue_end breq FilterKeepUp_GetValue_end
ldi r16, 1 ldi r16, 1
FilterKeepUp_GetValue_end: FilterKeepUp_GetValue_end:
@@ -78,8 +97,10 @@ FilterKeepUp_GetValue_end:
FilterKeepUp_SetValue: FilterKeepUp_SetValue:
tst r16 tst r16
breq FilterKeepUp_SetValue_end breq FilterKeepUp_SetValue_end
ldd r17, Y+FILTER_KEEPUP_OFFS_RESTARTVALUE ldd r17, Y+FILTER_KEEPUP_OFFS_RESTARTVALUE_LOW
std Y+FILTER_KEEPUP_OFFS_TIMER, r17 std Y+FILTER_KEEPUP_OFFS_TIMER_LOW, r17
ldd r17, Y+FILTER_KEEPUP_OFFS_RESTARTVALUE_HIGH
std Y+FILTER_KEEPUP_OFFS_TIMER_HIGH, r17
FilterKeepUp_SetValue_end: FilterKeepUp_SetValue_end:
ret ret
; @end ; @end
@@ -90,14 +111,15 @@ FilterKeepUp_SetValue_end:
; @routine FilterKeepUp_Every100ms @global ; @routine FilterKeepUp_Every100ms @global
; ;
; @param Y pointer to filter data ; @param Y pointer to filter data
; @clobbers r16 ; @clobbers r24, r25
FilterKeepUp_Every100ms: FilterKeepUp_Every100ms:
ldd r16, Y+FILTER_KEEPUP_OFFS_TIMER ldd r24, Y+FILTER_KEEPUP_OFFS_TIMER_LOW
tst r16 ldd r25, Y+FILTER_KEEPUP_OFFS_TIMER_HIGH
breq FilterKeepUp_Every100ms_end sbiw r25:r24, 1
dec r16 brcs FilterKeepUp_Every100ms_end
std Y+FILTER_KEEPUP_OFFS_TIMER, r16 std Y+FILTER_KEEPUP_OFFS_TIMER_LOW, r24
std Y+FILTER_KEEPUP_OFFS_TIMER_HIGH, r25
FilterKeepUp_Every100ms_end: FilterKeepUp_Every100ms_end:
ret ret
; @end ; @end