From d28e20b1798f422a27b7d263ea3ca2a718f7bd35 Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Mon, 28 Oct 2024 23:44:08 +0100 Subject: [PATCH] avr: allow for adjustable timing in simple LED module. --- avr/modules/led_simple/main.asm | 56 +++++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/avr/modules/led_simple/main.asm b/avr/modules/led_simple/main.asm index dcd45b5..65ba5a9 100644 --- a/avr/modules/led_simple/main.asm +++ b/avr/modules/led_simple/main.asm @@ -15,6 +15,8 @@ .dseg ledSimpleTimer: .byte 1 +ledSimpleOnTime: .byte 1 +ledSimpleOffTime: .byte 1 @@ -40,20 +42,15 @@ LED_SIMPLE_BEGIN: LedSimple_Init: sbi LED_SIMPLE_DDR, LED_SIMPLE_PINNUM ; out cbi LED_SIMPLE_PORT, LED_SIMPLE_PINNUM ; on - ldi r16, LED_SIMPLE_ONTIME - sts ledSimpleTimer, r16 + rcall LedSimple_SetDefaultTiming ; (R16) sec ret ; --------------------------------------------------------------------------- -; LedSimple_Every100ms +; @routine LedSimple_Every100ms @global ; -; IN: -; - nothing -; OUT: -; - nothing -; USED: +; @clobbers r16 LedSimple_Every100ms: lds r16, ledSimpleTimer @@ -65,14 +62,53 @@ LedSimple_Every100ms_zero: rjmp LedSimple_Tick_isOff ; is on sbi LED_SIMPLE_PORT, LED_SIMPLE_PINNUM ; off - ldi r16, LED_SIMPLE_OFFTIME + lds r16, ledSimpleOffTime rjmp LedSimple_Every100ms_setTimer LedSimple_Tick_isOff: cbi LED_SIMPLE_PORT, LED_SIMPLE_PINNUM ; on - ldi r16, LED_SIMPLE_ONTIME + lds r16, ledSimpleOnTime LedSimple_Every100ms_setTimer: sts ledSimpleTimer, r16 ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine LedSimple_SetDefaultTiming @global +; +; Set default timing for LED. +; @clobbers r16 +; + +LedSimple_SetDefaultTiming: + ldi r16, LED_SIMPLE_ONTIME + sts ledSimpleOnTime, r16 + sts ledSimpleTimer, r16 + ldi r16, LED_SIMPLE_OFFTIME + sts ledSimpleOffTime, r16 + cbi LED_SIMPLE_PORT, LED_SIMPLE_PINNUM ; on + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine LedSimple_SetFastTiming @global +; +; Set fast blinking timing for LED. Switch LED on. +; @clobbers r16 +; + +LedSimple_SetFastTiming: + ldi r16, 5 + sts ledSimpleOnTime, r16 + sts ledSimpleTimer, r16 + ldi r16, 3 + sts ledSimpleOffTime, r16 + cbi LED_SIMPLE_PORT, LED_SIMPLE_PINNUM ; on + ret +; @end