avr: more work on multifan module.

This commit is contained in:
Martin Preuss
2026-07-05 20:27:28 +02:00
parent 4dc2e0143f
commit 9842d8a2e5

View File

@@ -118,15 +118,16 @@ MultiFan_OnEverySecond_loop:
; @routine MultiFan_CheckPort @global
;
; @param r16 new port value (e.g. PINB)
; @clobbers r17, r18, r24, r25, Y
; @param r18 port change value (0 in a bit pos means: bit flipped to 0)
; @clobbers r24, r25, Y
MultiFan_CheckPort:
lds r17, multiFanPrevPortVal
inr r16, MULTIFAN_TACHO_INPUT
lds r18, multiFanPrevPortVal
sts multiFanPrevPortVal, r16
mov r18, r17
eor r18, r16 ; changed bits=1
com r18 ; complement: changed bits=0
or r18, r16 ; only bits are 0 which have just changed to 0
eor r18, r16 ; r18: changes in bits=1
com r18 ; r18: changes in bits=0
or r18, r16 ; r18: 0=bit flipped to 0
ldi yl, LOW(multiFanObjects)
ldi yh, HIGH(multiFanObjects)
@@ -137,7 +138,7 @@ MultiFan_CheckPort:
.if MULTIFAN_FANS >1
adiw yh:yl, MULTIFAN_FAN_SIZE
sbrs r18, MULTIFAN_TACHO2_PIN
rcall multiFanIncCounter
rcall multiFanIncCounter ; (r24, r25)
.endif
.if MULTIFAN_FANS >2
@@ -342,6 +343,41 @@ multiFanSetupTimer:
; ---------------------------------------------------------------------------
; @routine multiFanPinChangeIsr @global @isr
;
multiFanPinChangeIsr:
push r15
in r15, SREG
push r16
inr r16, MULTIFAN_TACHO_INPUT
push r18
lds r18, multiFanPrevPortVal
sts multiFanPrevPortVal, r16
eor r18, r16 ; r18: changes in bits=1
com r18 ; r18: changes in bits=0
or r18, r16 ; r18: 0=bit flipped to 0
push r24
push r25
push yl
push yh
rcall MultiFan_CheckPort ; (r24, r25, Y)
pop yh
pop yl
pop r25
pop r24
pop r18
pop r16
out SREG, r15
pop r15
reti
; @end