/** @file dma_cbuf.h * Module handling Direct Memory Access controller's circular system * * The module provides a convenient tool to receive data from a peripheral in a * buffered, low-latency, low-cpu usage, non-blocking way */ #ifndef _DMA_CBUF_H_ #define _DMA_CBUF_H_ //--includes-------------------------------------------------------------------- #include "dma.h" //--type definitions------------------------------------------------------------ struct DmaCircBuffer { volatile void* buffer; //the buffer to use as a circular buffer volatile void* src; //source peripheral register uint16_t size; //the size of the buffer uint16_t begin; //pointer to the current begin of the buffer enum DmaPeriph dma; //DMA peripheral, must correspond to peripheral enum DmaChannel channel; //DMA channel, must correspond to peripheral enum DmaConfig config; //DMA config, must correspond to peripheral bool dma_looped; //whether the DMA looped or not (buffer overflow) }; //--functions------------------------------------------------------------------- void dma_cbuf_configure(volatile struct DmaCircBuffer* buffer, volatile void* raw_buffer, volatile void* src, uint16_t buffer_size, enum DmaPeriph dma, enum DmaChannel channel, enum DmaConfig priority); uint32_t dma_cbuf_read_byte(volatile struct DmaCircBuffer* buffer, uint8_t* byte); #endif //_DMA_CBUF_H_