From 7b7096215951220826cf154be1000f0495abe199 Mon Sep 17 00:00:00 2001 From: Erick Ahmed Date: Wed, 31 Dec 2025 23:14:39 +0100 Subject: [PATCH] Inline with macros to save on jump clock cycles --- src/clockinator.S | 17 ++++++++++++----- src/led.inc | 5 ++--- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/clockinator.S b/src/clockinator.S index 3636503..4b0edf5 100644 --- a/src/clockinator.S +++ b/src/clockinator.S @@ -1,5 +1,5 @@ ; Registers -; r16: ISR setup, reusable after main; +; r16: ISR setup, reused only by START_BLINK on loop .org 0x0000 ; RESET Vector rjmp main @@ -56,13 +56,20 @@ loop: ; if midi clock then after do: - rcall start_blink + ; SOME CPI HERE + brne segment_led + START_BLINK ; Macro for inlining blink start logic - - ;rcall segment_led ; Output current BPM to 3-digit 7-segment LED [r24] + rjmp segment_led ; Output current BPM to 3-digit 7-segment LED [r24] ; sleep when BPM is stabilized (whenever BPM calculation are not being done) and outside of midi send ; to do this explore MCUCR register, it can do a lot of stuff - rjmp loop ; Loopback + rjmp loop + +; TODO: move to separate file +; keep as subroutine as it's called in two parts in the code +; or it can create issues with compiler +segment_led: + rjmp loop diff --git a/src/led.inc b/src/led.inc index 766523e..7767050 100644 --- a/src/led.inc +++ b/src/led.inc @@ -1,7 +1,7 @@ ; Registers: ; r16: timer0 start and stop operations -start_blink: +.MACRO START_BLINK ldi r16, (1 << OCF0A) ; Write Output Compare Flag 0 A to 1 out TIFR, r16 ; Clear Timer0 interrupt flag register @@ -12,8 +12,7 @@ start_blink: out TCCR0B, r16 ; Enable clock source sbi PORTB, PB0 ; Set LED on - - ret +.endm stop_blink: cbi PORTB, PB0 ; Set LED off