126 lines
3.2 KiB
C
126 lines
3.2 KiB
C
|
|
/*!
|
||
|
|
* @defgroup FIFO
|
||
|
|
* @brief First in first out queue
|
||
|
|
* @{*/
|
||
|
|
/**
|
||
|
|
* @file FIFO.h
|
||
|
|
* @brief Provide functions for a first in first out queue
|
||
|
|
* @details Runs on any Microcontroller.
|
||
|
|
* Provide functions that initialize a FIFO, put data in, get data out,
|
||
|
|
* and return the current size. The file includes two FIFOs
|
||
|
|
* using index implementation.
|
||
|
|
* @version ECE319K v1.0
|
||
|
|
* @author Daniel Valvano and Jonathan Valvano
|
||
|
|
* @copyright Copyright 2023 by Jonathan W. Valvano, valvano@mail.utexas.edu,
|
||
|
|
* @warning AS-IS
|
||
|
|
* @note For more information see http://users.ece.utexas.edu/~valvano/
|
||
|
|
* @date August 13, 2023
|
||
|
|
|
||
|
|
*/
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
#ifndef __FIFO_H__
|
||
|
|
#define __FIFO_H__
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* \brief TXFIFOSIZE the size of the transmit FIFO, which can hold 0 to TXFIFOSIZE-1 elements.
|
||
|
|
* The size must be a power of 2.
|
||
|
|
*/
|
||
|
|
#define TXFIFOSIZE 64 // must be a power of 2
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Initialize the transmit FIFO
|
||
|
|
* @param none
|
||
|
|
* @return none
|
||
|
|
* @see TxFifo_Put() TxFifo_Get() TxFifo_Size()
|
||
|
|
* @brief Initialize FIFO
|
||
|
|
* @note TXFIFOSIZE the size of the transmit FIFO
|
||
|
|
*/
|
||
|
|
void TxFifo_Init(void);
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Put character into the transmit FIFO
|
||
|
|
* @param data is a new character to save
|
||
|
|
* @return 0 for fail because full, 1 for success
|
||
|
|
* @see TxFifo_Init() TxFifo_Get() TxFifo_Size()
|
||
|
|
* @brief Put FIFO
|
||
|
|
* @note TXFIFOSIZE the size of the transmit FIFO
|
||
|
|
*/
|
||
|
|
int TxFifo_Put(char data);
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Get character from the transmit FIFO
|
||
|
|
* @param none
|
||
|
|
* @return 0 for fail because empty, nonzero is data
|
||
|
|
* @see TxFifo_Init() TxFifo_Put() TxFifo_Size()
|
||
|
|
* @brief Get FIFO
|
||
|
|
* @note TXFIFOSIZE the size of the transmit FIFO
|
||
|
|
*/
|
||
|
|
char TxFifo_Get(void);
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Determine how many elements are currently stored in the transmit FIFO
|
||
|
|
* @param none
|
||
|
|
* @return number of elements in FIFO
|
||
|
|
* @see TxFifo_Init() TxFifo_Put() TxFifo_Get()
|
||
|
|
* @brief number of elements in FIFO
|
||
|
|
* @note Does not change the FIFO
|
||
|
|
*/
|
||
|
|
uint32_t TxFifo_Size(void);
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* \brief RXFIFOSIZE the size of the receive FIFO, which can hold 0 to RXFIFOSIZE-1 elements
|
||
|
|
* The size must be a power of 2.
|
||
|
|
*/
|
||
|
|
#define RXFIFOSIZE 16 // must be a power of 2
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Initialize the receive FIFO
|
||
|
|
* @param none
|
||
|
|
* @return none
|
||
|
|
* @see RxFifo_Put() RxFifo_Get() RxFifo_Size()
|
||
|
|
* @brief Initialize FIFO
|
||
|
|
* @note RXFIFOSIZE the size of the receive FIFO
|
||
|
|
*/
|
||
|
|
void RxFifo_Init(void);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Put character into the receive FIFO
|
||
|
|
* @param data is a new character to save
|
||
|
|
* @return 0 for fail because full, 1 for success
|
||
|
|
* @see RxFifo_Init() RxFifo_Get() RxFifo_Size()
|
||
|
|
* @brief Put FIFO
|
||
|
|
* @note RXFIFOSIZE the size of the receive FIFO
|
||
|
|
*/
|
||
|
|
int RxFifo_Put(char data);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Get character from the receive FIFO
|
||
|
|
* @param none
|
||
|
|
* @return 0 for fail because empty, nonzero is data
|
||
|
|
* @see RxFifo_Init() RxFifo_Put() RxFifo_Size()
|
||
|
|
* @brief Get FIFO
|
||
|
|
* @note RXFIFOSIZE the size of the receive FIFO
|
||
|
|
*/
|
||
|
|
char RxFifo_Get(void);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Determine how many elements are currently stored in the receive FIFO
|
||
|
|
* @param none
|
||
|
|
* @return number of elements in FIFO
|
||
|
|
* @see RxFifo_Init() RxFifo_Put() RxFifo_Get()
|
||
|
|
* @brief number of elements in FIFO
|
||
|
|
* @note Does not change the FIFO
|
||
|
|
*/
|
||
|
|
uint32_t RxFifo_Size(void);
|
||
|
|
|
||
|
|
#endif // __FIFO_H__
|
||
|
|
/** @}*/
|