Files
aqhomecontrol/avr/modules/com2w/com2wn_io.asm
Martin Preuss d9e7d4df81 com2w*: allow for higher frequencies than 8MHz
to be used with node S03, which is run at 20MHz.
2025-08-18 18:04:30 +02:00

166 lines
3.5 KiB
NASM

; ***************************************************************************
; 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_IO_H
#define AVR_MODULES_COM2W_COM2WN_IO_H
; WORK IN PROGRESS
.cseg
; ---------------------------------------------------------------------------
; @routine com2wSetupLines
com2wSetupLines:
; setup CLK line (as input, disable internal pull-up resistor)
rcall com2wClkSetHigh
.ifdef COM_CLK_PUE
ldd r16, Y+COM2W_IFACE_OFFS_PINMASK_CLK
com r16
inr r17, COM_CLK_PUE
and r17, r16
outr COM_CLK_PUE, r17
.endif
; setup DATA line (as input, disable internal pull-up resistor)
rcall com2wnDataSetHigh
.ifdef COM_DATA_PUE
ldd r16, Y+COM2W_IFACE_OFFS_PINMASK_DATA
com r16
inr r17, COM_DATA_PUE
and r17, r16
outr COM_DATA_PUE, r17
.endif
ret
; @end
; ---------------------------------------------------------------------------
; @routine com2wClkSetHigh
;
; @clobbers none
com2wClkSetHigh:
push r16
push r17
ldd r16, Y+COM2W_IFACE_OFFS_PINMASK_CLK
; clear bit in io reg (AND with complement)
com r16
inr r17, COM_CLK_DDR
and r17, r16
outr COM_CLK_DDR, r17 ; make pin input
.ifndef COM_CLK_PUE
inr r17, COM_CLK_OUTPUT
and r17, r16 ; disable pullup
outr COM_CLK_OUTPUT, r17
.endif
pop r17
pop r16
ret
; @end
; ---------------------------------------------------------------------------
; @routine com2wnClkSetLow
;
; @param Y pointer to interface data in SRAM
; @clobbers none
com2wnClkSetLow:
push r16
push r17
ldd r16, Y+COM2W_IFACE_OFFS_PINMASK_CLK
; set bit in io reg
inr r17, COM_CLK_DDR
or r17, r16
outr COM_CLK_DDR, r17 ; make pin output
com r16
inr r17, COM_CLK_OUTPUT
and r17, r16
outr COM_CLK_OUTPUT, r17 ; set pin low
pop r17
pop r16
ret
; @end
; ---------------------------------------------------------------------------
; @routine com2wnDataSetHigh
;
; @param Y pointer to interface data in SRAM
; @clobbers none
com2wnDataSetHigh:
push r16
push r17
ldd r16, Y+COM2W_IFACE_OFFS_PINMASK_DATA
; clear bit in io reg (AND with complement)
com r16
inr r17, COM_DATA_DDR
and r17, r16
outr COM_DATA_DDR, r17 ; make pin input
.ifndef COM_DATA_PUE
inr r17, COM_DATA_OUTPUT
and r17, r16 ; disable pullup
outr COM_DATA_OUTPUT, r17
.endif
pop r17
pop r16
ret
; @end
; ---------------------------------------------------------------------------
; @routine com2wnDataSetLow
;
; @param Y pointer to interface data in SRAM
; @clobbers none
com2wnDataSetLow:
push r16
push r17
ldd r16, Y+COM2W_IFACE_OFFS_PINMASK_DATA
; set bit in io reg
inr r17, COM_DATA_DDR
or r17, r16
outr COM_DATA_DDR, r17 ; make pin output
com r16
inr r17, COM_DATA_OUTPUT
and r17, r16
outr COM_DATA_OUTPUT, r17 ; set pin low
pop r17
pop r16
ret
; @end
#endif ; AVR_MODULES_COM2W_COM2WN_IO_H