avr: started adding com2wn module (multiple com2w devices in one)
This commit is contained in:
112
avr/modules/com2w/com2wn_init.asm
Normal file
112
avr/modules/com2w/com2wn_init.asm
Normal file
@@ -0,0 +1,112 @@
|
||||
; ***************************************************************************
|
||||
; copyright : (C) 2025 by Martin Preuss
|
||||
; email : martin@libchipcard.de
|
||||
;
|
||||
; ***************************************************************************
|
||||
; * This file is part of the project "AqHome". *
|
||||
; * Please see toplevel file COPYING of that project for license details. *
|
||||
; ***************************************************************************
|
||||
|
||||
#ifndef AVR_MODULES_COM2W_COM2WN_INIT_H
|
||||
#define AVR_MODULES_COM2W_COM2WN_INIT_H
|
||||
|
||||
|
||||
; WORK IN PROGRESS
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @macro mCOM2WN_INIT
|
||||
;
|
||||
; @param @0 interface number (beginning with 0)
|
||||
|
||||
.macro mCOM2WN_INIT
|
||||
ldi yl, LOW(com2w@0_iface)
|
||||
ldi yh, HIGH(com2w@0_iface)
|
||||
rcall com2wnInit
|
||||
ldi r16, COM_MASK_CLK@0
|
||||
std Y+COM2W_IFACE_OFFS_PINMASK_CLK, r16
|
||||
ldi r16, COM_MASK_DATA@0
|
||||
std Y+COM2W_IFACE_OFFS_PINMASK_DATA, r16
|
||||
ldi r16, COM_MASK_IRQ@0
|
||||
std Y+COM2W_IFACE_OFFS_PINMASK_IRQ, r16
|
||||
.endmacro
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.cseg
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine COM2WN_Init
|
||||
;
|
||||
|
||||
COM2WN_Init:
|
||||
ldi r16, 0xff ; start with all clock lines hi
|
||||
sts com2wnIoCurrentClockStates, r16
|
||||
sts com2wnIoLastClockStates, r16
|
||||
|
||||
clr r16
|
||||
sts com2wnIoFlags, r16
|
||||
|
||||
ldi yl, LOW(com2wnIoRingBuffer)
|
||||
ldi yh, HIGH(com2wnIoRingBuffer)
|
||||
ldi r16, COM2WN_IO_RINGBUFFER_SIZE
|
||||
rcall RingBufferY_Init ; (R17)
|
||||
|
||||
.if COM_PORTS >0
|
||||
mCOM2WN_INIT 0
|
||||
.endif
|
||||
.if COM_PORTS >1
|
||||
mCOM2WN_INIT 1
|
||||
.endif
|
||||
|
||||
.if COM_PORTS >2
|
||||
mCOM2WN_INIT 2
|
||||
.endif
|
||||
.if COM_PORTS >3
|
||||
mCOM2WN_INIT 3
|
||||
.endif
|
||||
|
||||
.if COM_PORTS >4
|
||||
mCOM2WN_INIT 4
|
||||
.endif
|
||||
.if COM_PORTS >5
|
||||
mCOM2WN_INIT 5
|
||||
.endif
|
||||
|
||||
.if COM_PORTS >6
|
||||
mCOM2WN_INIT 6
|
||||
.endif
|
||||
.if COM_PORTS >7
|
||||
mCOM2WN_INIT 7
|
||||
.endif
|
||||
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine com2wInit
|
||||
;
|
||||
|
||||
com2wnInit:
|
||||
rcall NET_Interface_Init ; (R16, R17, X)
|
||||
ldi r16, COM2W_MODE_IDLE
|
||||
rcall com2wSetMode ; (R17)
|
||||
|
||||
rcall com2wSetupLines
|
||||
rcall com2wSetupIrq
|
||||
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
#endif ; AVR_MODULES_COM2W_COM2WN_INIT_H
|
||||
|
||||
|
||||
Reference in New Issue
Block a user