n32: use com2w2 instead of com2w

This commit is contained in:
Martin Preuss
2026-07-05 20:07:05 +02:00
parent e6919677b3
commit 23cb3e62dc

View File

@@ -53,7 +53,6 @@
; ---------------------------------------------------------------------------
; firmware settings including list of modules used
@@ -63,7 +62,7 @@
;#define MODULES_LED2
;#define MODULES_LED3
#define MODULES_NETWORK
#define MODULES_COM2W
#define MODULES_COM2W2
;#define MODULES_TWI_MASTER
;#define MODULES_LCD
;#define LCD_MINIMAL_FONT
@@ -76,7 +75,8 @@
;#define MODULES_MOTION
;#define MODULES_CCS811
;#define MODULES_BRIGHTNESS
#define MODULES_MULTIFAN
;#define MODULES_MULTIFAN
#define APPS_NETWORK
@@ -117,26 +117,25 @@
; ---------------------------------------------------------------------------
; Reset and interrupt vectors
rjmp BOOTLOADER_ADDR ; 0x00: Reset vector Reset Vector
reti ; 0x01: INT0 External Interrupt 0
rjmp com2wPcintIsr ; 0x02: PCI Pin Change Interrupt
; rjmp pinChangeIsr ; 0x02: PCI Pin Change Interrupt
reti ; 0x03: OC1A Timer/Counter1 Compare Match 1A
reti ; 0x04: OC1B Timer/Counter1 Compare Match 1B
reti ; 0x05: OVF1 Timer/Counter1 Overflow
reti ; 0x06: OVF0 Timer/Counter0 Overflow
reti ; 0x07: USI_START USI Start
reti ; 0x08: USI_OVF USI Overflow
reti ; 0x09: ERDY EEPROM Ready
reti ; 0x0a: ACI Analog Comparator
reti ; 0x0b: ADCC ADC Conversion Complete
reti ; 0x0c: WDT Watchdog Time-Out
reti ; 0x0d: INT1 External Interrupt 1
rjmp baseTimerIrqOC0A ; 0x0e: OC0A Timer/Counter0 Compare Match A
reti ; 0x0f: OC0B Timer/Counter0 Compare Match B
reti ; 0x10: ICP0 Interrupt Capture Event for Timer/Counter0
reti ; 0x11: OC1D Timer/Counter1 Compare Match D
reti ; 0x12: FAULT_PROT Timer/Counter1 Fault Protection
rjmp BOOTLOADER_ADDR ; 1: Reset vector Reset Vector
reti ; 2: INT0 External Interrupt 0
reti ; 3: PCI Pin Change Interrupt
reti ; 4: OC1A Timer/Counter1 Compare Match 1A
reti ; 5: OC1B Timer/Counter1 Compare Match 1B
reti ; 6: OVF1 Timer/Counter1 Overflow
reti ; 7: OVF0 Timer/Counter0 Overflow
reti ; 8: USI_START USI Start
reti ; 9: USI_OVF USI Overflow
reti ; 10: ERDY EEPROM Ready
reti ; 11: ACI Analog Comparator
reti ; 12: ADCC ADC Conversion Complete
reti ; 13: WDT Watchdog Time-Out
rjmp com2w2PcintIsr ; 14: INT1 External Interrupt 1
rjmp baseTimerIrqOC0A ; 15: OC0A Timer/Counter0 Compare Match A
reti ; 16: OC0B Timer/Counter0 Compare Match B
reti ; 17: ICP0 Interrupt Capture Event for Timer/Counter0
reti ; 18: OC1D Timer/Counter1 Compare Match D
reti ; 19: FAULT_PROT Timer/Counter1 Fault Protection
devInfoBlock: ; 12 bytes
devInfoManufacturer: .db 'A', 'Q', 'U', 'A'
@@ -151,6 +150,10 @@ firmwareVersion: .db FIRMWARE_VARIANT_TEMP_WINDOW, FIRMWARE_VERSION_MAJOR
; @routine firmwareStart @global
firmwareStart:
ldi r16, 0xff
sts sysPortAValue, r16
sts sysPortBValue, r16
rjmp main
; @end
@@ -202,6 +205,61 @@ onEveryLoop:
; @end
; ---------------------------------------------------------------------------
; @routine comSetupIrq
;
; setup IRQ for COM2W module
comIrqSetup:
inr r16, MCUCR
cbr r16, (1<<ISC01) | (1<<ISC00)
ori r16, (1<<ISC01) | (0<<ISC00) ; falling edge triggers irq
ret
; @end
; ---------------------------------------------------------------------------
; @routine comIrqEnable
;
; enable IRQ for COM2W module
comIrqEnable:
push r16
inr r16, GIMSK
sbr r16, (1<<INT1) ; enable INT1 interrupt
outr GIMSK, r16
pop r16
ret
; @end
; ---------------------------------------------------------------------------
; @routine comIrqEnable
;
; disable IRQ for COM2W module
comIrqDisable:
push r16
inr r16, GIMSK
cbr r16, (1<<INT1) ; disable INT1 interrupt
outr GIMSK, r16
pop r16
ret
; @end
.equ COM_SETUPIRQ_FN = comIrqSetup
.equ COM_ENABLEIRQ_FN = comIrqEnable
.equ COM_DISABLEIRQ_FN = comIrqDisable
; ---------------------------------------------------------------------------
; @routine pinChangeIsr @global @isr
;
@@ -210,14 +268,33 @@ onEveryLoop:
; @clobbers: none
pinChangeIsr:
rjmp DEBUG2
push r15
in r15, SREG
push r18
push r19
inr r18, PINA
inr r19, PINB
push r16
push r17
push r16
push r17
inr r16, PINA
inr r17, PINB
push r18
push r19
lds r18, sysPortAValue
lds r19, sysPortBValue
sts sysPortAValue, r16
sts sysPortBValue, r17
eor r18, r16 ; r18: changes in bits=1
com r18 ; r18: changes in bits=0
or r18, r16 ; r18: 0=bit flipped to 0
eor r19, r17 ; r19: changes in bits=1
com r19 ; r19: changes in bits=0
or r19, r17 ; r19: 0=bit flipped to 0
; check if CLK flipped to 0
sbrc r18, COM_CLK_PIN
rjmp pinChangeIsr_l1
; receive packet
push r20
push r21
push r22
@@ -227,11 +304,13 @@ pinChangeIsr:
push xh
push yl
push yh
push r18
mov r16, r19 ; PINB
bigcall MultiFan_CheckPort ; r17, r18, r24, r25, Y
pop r16 ; pop PINA to r16
bigcall COM2W_CheckPort ; (r16, r17, r18, r19, r20, r21, r22, r24, r25, X, Y)
push r16 ; push PINA
push r18 ; push CHANGEA
ldi yl, LOW(com2w2_iface) ; recv next packet
ldi yh, HIGH(com2w2_iface)
rcall com2w2ReceiveNextPkg ; (R16, R17, R18, R19, R20, R21, R22, R24, R25, X)
pop r18
pop r16
pop yh
pop yl
pop xh
@@ -240,10 +319,12 @@ pinChangeIsr:
pop r24
pop r22
pop r21
pop r17
pop r16
pop r19
pop r18
pop r20
pinChangeIsr_l1:
pop r19
pop r18
pop r17
pop r16
out SREG, r15
pop r15
reti
@@ -257,13 +338,14 @@ pinChangeIsr:
.include "devices/all/hw_tn861.asm"
.include "devices/all/includes.asm"
.include "common/divide.asm"
.include "common/debug.asm"
; ---------------------------------------------------------------------------
; defines for network interface
.equ netInterfaceData = com2w_iface
.equ netInterfaceData = com2w2_iface