From de89bc94b6c2ea3ecf0c54bcc75721677fcc7a35 Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Thu, 1 May 2025 00:57:48 +0200 Subject: [PATCH] avr: use 2 byte counter for f_keepup. --- avr/modules/f_keepup/main.asm | 52 +++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/avr/modules/f_keepup/main.asm b/avr/modules/f_keepup/main.asm index 7f24efd..3e781f5 100644 --- a/avr/modules/f_keepup/main.asm +++ b/avr/modules/f_keepup/main.asm @@ -11,9 +11,11 @@ ; *************************************************************************** ; defines -.equ FILTER_KEEPUP_OFFS_TIMER = 0 -.equ FILTER_KEEPUP_OFFS_RESTARTVALUE = 1 -.equ FILTER_KEEPUP_DATA_SIZE = 2 +.equ FILTER_KEEPUP_OFFS_TIMER_LOW = 0 +.equ FILTER_KEEPUP_OFFS_TIMER_HIGH = 1 +.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: 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 ; @end @@ -54,12 +57,28 @@ FilterKeepUp_Fini: ; @routine FilterKeepUp_GetValue @global ; ; @param Y pointer to filter data -; @return R16 value +; @return R17:R16 value ; @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: - ldd r16, Y+FILTER_KEEPUP_OFFS_TIMER - tst r16 + ldd r16, Y+FILTER_KEEPUP_OFFS_TIMER_LOW + ldd r17, Y+FILTER_KEEPUP_OFFS_TIMER_HIGH + or r16, r17 breq FilterKeepUp_GetValue_end ldi r16, 1 FilterKeepUp_GetValue_end: @@ -78,8 +97,10 @@ FilterKeepUp_GetValue_end: FilterKeepUp_SetValue: tst r16 breq FilterKeepUp_SetValue_end - ldd r17, Y+FILTER_KEEPUP_OFFS_RESTARTVALUE - std Y+FILTER_KEEPUP_OFFS_TIMER, r17 + ldd r17, Y+FILTER_KEEPUP_OFFS_RESTARTVALUE_LOW + 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: ret ; @end @@ -90,14 +111,15 @@ FilterKeepUp_SetValue_end: ; @routine FilterKeepUp_Every100ms @global ; ; @param Y pointer to filter data -; @clobbers r16 +; @clobbers r24, r25 FilterKeepUp_Every100ms: - ldd r16, Y+FILTER_KEEPUP_OFFS_TIMER - tst r16 - breq FilterKeepUp_Every100ms_end - dec r16 - std Y+FILTER_KEEPUP_OFFS_TIMER, r16 + ldd r24, Y+FILTER_KEEPUP_OFFS_TIMER_LOW + ldd r25, Y+FILTER_KEEPUP_OFFS_TIMER_HIGH + sbiw r25:r24, 1 + brcs FilterKeepUp_Every100ms_end + std Y+FILTER_KEEPUP_OFFS_TIMER_LOW, r24 + std Y+FILTER_KEEPUP_OFFS_TIMER_HIGH, r25 FilterKeepUp_Every100ms_end: ret ; @end