//******************
// CLASS: DMA
//
// DESCRIPTION:
//  Direct Memory Access
//
// CREATED: 6/16/2022, by Carlos Estay
//
// FILE: dma.h
// Information: RM CH 10

#include "stm32g0b1xx.h"

#ifndef DMA_H
#define DMA_H

#define UART_RDR_OFFSET 0x24

typedef enum DMAChannelMode__
{
    DMA_MemToMem,
    DMA_PerToMem,
    DMA_MemToPer,
    DMA_PerToPer,
}DMAChannelMode;

/// @brief Initilizes a DMA channel
/// @param DMA channel address
/// @param DMA channel mode
/// @param Peripheral address  
/// @param Memory address  
void DMA_Init(DMA_Channel_TypeDef*, DMAChannelMode, uint8_t*, uint32_t);

/// @brief 
/// @param  
/// @param  
void DMA_SetEnable(DMA_Channel_TypeDef*, uint8_t);
/// @brief 
/// @param  
/// @param  

void DMA_SetMemoryAddress(DMA_Channel_TypeDef*, uint8_t*);

/// @brief 
/// @param  
/// @param  
void DMA_SetPerAddress(DMA_Channel_TypeDef*, uint32_t);

/// @brief 
/// @param  
/// @param  
void DMA_StartTransfer(DMA_Channel_TypeDef*, uint16_t);

/// @brief gets the bytes received i a peripheral to memory transfer
/// @param  DMA channel address
/// @param  buffer size(max)
/// @return bytes received
uint16_t DMA_GetRcvdCount(DMA_Channel_TypeDef*, uint16_t);

  #endif /* DMA_H */