; *************************************************************************** ; 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. * ; *************************************************************************** ; *************************************************************************** ; defines .equ UART_RINGBUFFER_IN_SIZE = 24 .equ UART_RINGBUFFER_OUT_SIZE = 32 .equ UART_FLAGS_TXEN_BIT = 7 .equ UART_FLAGS_RXEN_BIT = 6 .equ UART_FLAGS_HWOVERRUN_BIT = 5 .equ UART_FLAGS_FRAMEERROR_BIT = 4 .equ UART_FLAGS_SWOVERRUN_BIT = 3 .equ UART_FLAGS_SWUNDERRUN_BIT = 2 .equ UART_FLAGS_LASTBYTESENT_BIT = 1 ; *************************************************************************** ; data .dseg uartFlags: .byte 1 uartRingbufferIn: .byte RINGBUFFERY_SIZE+UART_RINGBUFFER_IN_SIZE uartRingbufferOut: .byte RINGBUFFERY_SIZE+UART_RINGBUFFER_OUT_SIZE ; *************************************************************************** ; code .cseg UART_Init: clr r16 sts uartFlags, r16 ldi r16, UART_RINGBUFFER_IN_SIZE ldi yl, LOW(uartRingbufferIn) ldi yh, HIGH(uartRingbufferIn) rcall RingBufferY_Init ldi r16, UART_RINGBUFFER_OUT_SIZE ldi yl, LOW(uartRingbufferOut) ldi yh, HIGH(uartRingbufferOut) rcall RingBufferY_Init ; set baudrate .if clock == 8000000 ldi r16, 25 ; (19.2Kb/s at 8MHz) ldi r17, 0 .endif .if clock == 1000000 ldi r16, 2 ; (19.2Kb/s at 1MHz) ldi r17, 0 .endif M_IO_WRITE UBRRH, r17 M_IO_WRITE UBRRL, r16 ; set character format .ifdef URSEL ldi r16, (1<