avr: more ringbuffer macros and code.
This commit is contained in:
91
avr/common/ringbuffer_y.asm
Normal file
91
avr/common/ringbuffer_y.asm
Normal file
@@ -0,0 +1,91 @@
|
||||
; ***************************************************************************
|
||||
; 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. *
|
||||
; ***************************************************************************
|
||||
|
||||
|
||||
.equ RINGBUFFERY_OFFS_MAXSIZE = 0
|
||||
.equ RINGBUFFERY_OFFS_USED = 1
|
||||
.equ RINGBUFFERY_OFFS_READPOS = 2
|
||||
.equ RINGBUFFERY_OFFS_WRITEPOS = 3
|
||||
.equ RINGBUFFERY_OFFS_DATA = 4
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine RingBufferY_Init
|
||||
;
|
||||
; @param R16 size of ringbuffer
|
||||
; @param Y base address of ringbuffer struct
|
||||
; @return CFLAG set if okay, cleared on error (i.e. buffer full)
|
||||
; @clobbers R17
|
||||
|
||||
RingBufferY_Init:
|
||||
std Y+RINGBUFFERY_OFFS_MAXSIZE, r16
|
||||
rjmp RingBufferY_Reset
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine RingBufferY_WriteByte
|
||||
;
|
||||
; @param R16 byte to write
|
||||
; @param Y base address of ringbuffer struct
|
||||
; @return CFLAG set if okay, cleared on error (i.e. buffer full)
|
||||
; @clobbers R17, R18, X
|
||||
|
||||
RingBufferY_WriteByte:
|
||||
m_ringbuffer_y_writebyte \
|
||||
RINGBUFFERY_OFFS_MAXSIZE, \
|
||||
RINGBUFFERY_OFFS_USED, \
|
||||
RINGBUFFERY_OFFS_READPOS, \
|
||||
RINGBUFFERY_OFFS_WRITEPOS, \
|
||||
RINGBUFFERY_OFFS_DATA
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @macro m_ringbuffer_y_readbyte
|
||||
;
|
||||
; @param Y base address of ringbuffer struct
|
||||
; @return CFLAG set if okay, cleared on error (i.e. buffer empty)
|
||||
; @return R16 byte read
|
||||
; @clobbers R17, R18, X
|
||||
|
||||
RingBufferY_ReadByte:
|
||||
m_ringbuffer_y_readbyte \
|
||||
RINGBUFFERY_OFFS_MAXSIZE, \
|
||||
RINGBUFFERY_OFFS_USED, \
|
||||
RINGBUFFERY_OFFS_READPOS, \
|
||||
RINGBUFFERY_OFFS_WRITEPOS, \
|
||||
RINGBUFFERY_OFFS_DATA
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @macro m_ringbuffer_y_reset
|
||||
;
|
||||
; @param Y base address of ringbuffer struct
|
||||
; @clobbers R17
|
||||
|
||||
RingBufferY_Reset:
|
||||
m_ringbuffer_y_reset \
|
||||
RINGBUFFERY_OFFS_MAXSIZE, \
|
||||
RINGBUFFERY_OFFS_USED, \
|
||||
RINGBUFFERY_OFFS_READPOS, \
|
||||
RINGBUFFERY_OFFS_WRITEPOS, \
|
||||
RINGBUFFERY_OFFS_DATA
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user