Files
aqhomecontrol/avr/common/utils_wait_pin.asm
2024-10-20 18:50:46 +02:00

55 lines
1.4 KiB
NASM

; ***************************************************************************
; copyright : (C) 2023 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. *
; ***************************************************************************
; ***************************************************************************
; code
.cseg
; ---------------------------------------------------------------------------
; Util_WaitForPinState1ms
;
; Waits up to 1ms for status change on a pin
;
; @param R16 state to wait for (00 for low, 0xff for high)
; @param R17 io address of the port containing the pin
; @param R18 pin mask
; @return CFLAG set if state reached, cleared otherwise
; REGS: R19, R22
Util_WaitForPinState1ms:
push xl
push xh
clr xh
mov xl, r17
ldi r19, 200
com2WaitForDataState1ms_loop:
ld r22, X
eor r22, r16
andi r22, r18
breq com2WaitForDataState1ms_stateReached
Utils_WaitNanoSecs 5000, 0, r22 ; wait for 5us
dec r19
brne com2WaitForDataState1ms_loop
clc
rjmp com2WaitForDataState1ms_ret
com2WaitForDataState1ms_stateReached:
sec
com2WaitForDataState1ms_ret:
pop xh
pop xl
ret