/** ************************************************************************************************** * @file usart.h * @author Kerem Yollu & Edwin Koch * @date 02.11.2021 * @version 1.0 ************************************************************************************************** * @brief USART functionalities description and implementation template * * **Detailed Description :** * * This header file for pin control is based on the most common configuation options * curenty awailable for modern hardware. * Depending of the used Chip, some function may vary or be unawailable. * Please take a minute to go and explore the according Chips pin.c file to see woh each function * is implmented. * * @todo * - 03.11.2021 : MAybe find a way to link the awalabe uart channnels with the awailable pins for that USART channel ************************************************************************************************** */ #ifndef _USART_H_ #define _USART_H_ #ifdef __cplusplus extern "C" { #endif #include "pin.h" #define NO_PARITY_CTRL 0 #define PARITY_CTRL 1 /*! Enum of USART Word Lenght Options */ typedef enum { seven, /*!< **7 bits** word Lenght */ eight, /*!< **8 bits** word Lenght */ nine /*!< **9 bits** word Lenght */ }usartWordLength_t; /*! Enum of USART Word Lenght Options */ typedef enum { usart1 = USART1_BASE , /*!< USART Channel 1 */ usart2 = USART2_BASE /*!< USART Channel 2 */ }usartNo_t; /*! Enum of USART Parity Even or Odd */ typedef enum { even, /*!< **Even** Parity */ odd /*!< **Odd** Parity */ }usartParity_t; /*! Enum of USART Hardware flow control options */ typedef enum { noFlowControl, /*!< **Disabeled** */ cts, /*!< **CTS** Only */ rts, /*!< **RTS** Only */ ctsRts /*!< **CTS & RTS** Enabled */ }usartHwFlowCtrl_t; /** * \brief Enable the USART with the most commment settings * \param usartNo_t channel Uart **Channel** to be used * \param pinNo_t pinTx Pin to be used for **Transmit** * \param pinNo_t pinRx Pin to be used for **Recieve** * \retval none */ void usartInit( usartNo_t channel, pinNo_t pinTx, pinNo_t pinRx, uint32_t baud, usartWordLength_t lenght, uint8_t parity, usartHwFlowCtrl_t flowCtrl); /** * \brief Enable the USART Transmission pin, be carefull this function will not link the right pin to the right UART channel. * \param pinNo_t pinTx Pin to be used for **Transmit** * \retval none */ void usartInitTx(pinNo_t pinTx); /** * \brief Enable the USART Recieve pin, be carefull this function will not link the right pin to the right UART channel. * \param pinNo_t pinRx Pin to be used for **Transmit** * \retval none */ void usartInitRx(pinNo_t pinRx); /** * \brief Sets the word lenght of the Usart channel. * \param usartNo_t channel, * \param usartWordLength_t lenght * \retval none */ void usartSetWordLenght(usartNo_t channel, usartWordLength_t lenght); /** * \brief Sets the Baud Rate of the Usart channel. * \param usartNo_t channel, * \param uint32_t baud * \retval none */ void usartSetBaudRate(usartNo_t channel, uint32_t baud); /** * \brief Stups Hardware Flow control * \param usartNo_t channel, * \param usartHwFlowCtrl_t flowCtrl * \retval none */ void usartSetHwFlowCtrl(usartNo_t channel, usartHwFlowCtrl_t flowCtrl); /** * \brief Sends a char array until \0 is detected. * \param usartNo_t channel, * \param *ptr pointer to char array * \retval none */ void print_Usart(usartNo_t channel,char *ptr); /** * \brief Cheks if the send buffer is empty an than Sends one Char * \param usartNo_t channel, * \param uint8_t ch one Character. * \retval none */ void usartSendChar(usartNo_t channel, uint8_t ch); /** * \brief Cheks if the recieve buffer is NOT empty an than Rreturns the recieved Char * \param usartNo_t channel, * \param uint8_t ch one Character. * \retval none */ uint8_t usartGetChar(usartNo_t channel); #ifdef __cplusplus } #endif #endif // _USART_H_