avr: more work on multifan module.
This commit is contained in:
@@ -118,15 +118,16 @@ MultiFan_OnEverySecond_loop:
|
|||||||
; @routine MultiFan_CheckPort @global
|
; @routine MultiFan_CheckPort @global
|
||||||
;
|
;
|
||||||
; @param r16 new port value (e.g. PINB)
|
; @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:
|
MultiFan_CheckPort:
|
||||||
lds r17, multiFanPrevPortVal
|
inr r16, MULTIFAN_TACHO_INPUT
|
||||||
|
lds r18, multiFanPrevPortVal
|
||||||
sts multiFanPrevPortVal, r16
|
sts multiFanPrevPortVal, r16
|
||||||
mov r18, r17
|
eor r18, r16 ; r18: changes in bits=1
|
||||||
eor r18, r16 ; changed bits=1
|
com r18 ; r18: changes in bits=0
|
||||||
com r18 ; complement: changed bits=0
|
or r18, r16 ; r18: 0=bit flipped to 0
|
||||||
or r18, r16 ; only bits are 0 which have just changed to 0
|
|
||||||
|
|
||||||
ldi yl, LOW(multiFanObjects)
|
ldi yl, LOW(multiFanObjects)
|
||||||
ldi yh, HIGH(multiFanObjects)
|
ldi yh, HIGH(multiFanObjects)
|
||||||
@@ -137,7 +138,7 @@ MultiFan_CheckPort:
|
|||||||
.if MULTIFAN_FANS >1
|
.if MULTIFAN_FANS >1
|
||||||
adiw yh:yl, MULTIFAN_FAN_SIZE
|
adiw yh:yl, MULTIFAN_FAN_SIZE
|
||||||
sbrs r18, MULTIFAN_TACHO2_PIN
|
sbrs r18, MULTIFAN_TACHO2_PIN
|
||||||
rcall multiFanIncCounter
|
rcall multiFanIncCounter ; (r24, r25)
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
.if MULTIFAN_FANS >2
|
.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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user