avr: added com2w2 (slightly improved version of com2w).
- move IRQ control to main code (only the main code knows exactly which combination of pins is used for com2) - split one big module into multiple smaller files (easier to maintain)
This commit is contained in:
76
avr/modules/com2w2/bytewrite.asm
Normal file
76
avr/modules/com2w2/bytewrite.asm
Normal file
@@ -0,0 +1,76 @@
|
||||
; ***************************************************************************
|
||||
; copyright : (C) 2026 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_COM2W2_BYTEWRITE_H
|
||||
#define AVR_MODULES_COM2W2_BYTEWRITE_H
|
||||
|
||||
|
||||
.cseg
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine com2w2SendBytes
|
||||
;
|
||||
; @param R18 number of bytes to send
|
||||
; @param X pointer to bytes to send
|
||||
; @param Y pointer to interface data in SRAM
|
||||
; @clobbers: r16, r18, X (r17, r22)
|
||||
|
||||
com2w2SendBytes:
|
||||
com2w2SendBytes_loop:
|
||||
rcall com2w2ClkSetLow ; (none)
|
||||
rcall com2w2WaitTime1 ; longer wait period (R22)
|
||||
ld r16, X+
|
||||
rcall com2w2SendByte ; (R16, R17, R22)
|
||||
dec r18
|
||||
brne com2w2SendBytes_loop
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine com2w2SendByte
|
||||
;
|
||||
; @param R16 byte to send
|
||||
; @clobbers: r16, r17 (r22)
|
||||
|
||||
com2w2SendByte:
|
||||
push r15
|
||||
in r15, SREG
|
||||
ldi r17, 8
|
||||
com2w2SendByte_loop:
|
||||
M_COM2WCLKSETLOW
|
||||
out SREG, r15 ; probably enable irqs
|
||||
rcall com2w2WaitTime1 ; wait for longer time (R22)
|
||||
lsr r16
|
||||
brcs com2w2SendByte_send1
|
||||
M_COM2WDATASETLOW
|
||||
rjmp com2w2SendByte_sent
|
||||
com2w2SendByte_send1:
|
||||
M_COM2WDATASETHIGH
|
||||
com2w2SendByte_sent:
|
||||
Utils_WaitNanoSecs 5000, 0, r22 ; wait for very short time to ensure data is stable when clock rises
|
||||
cli ; ensure time period by disabling irqs
|
||||
M_COM2WCLKSETHIGH
|
||||
rcall com2w2WaitTime2 ; wait for shorter time (R22)
|
||||
dec r17
|
||||
brne com2w2SendByte_loop
|
||||
out SREG, r15
|
||||
pop r15
|
||||
rcall com2w2WaitTime2 ; wait for shorter time (R22)
|
||||
M_COM2WDATASETHIGH ; ensure data line is high
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user