/*! * @file apm32f0xx_cec.h * * @brief This file contains all the functions prototypes for the CEC firmware library * * @version V1.0.1 * * @date 2021-07-01 * */ #ifndef __CEC_H #define __CEC_H #include "apm32f0xx.h" #ifdef __cplusplus extern "C" { #endif /** @addtogroup Peripherals_Library Standard Peripheral Library @{ */ /** @addtogroup CEC_Driver CEC Driver @{ */ /** @addtogroup CEC_Enumerations Enumerations @{ */ /** * @brief CEC_Signal_Free_Time */ typedef enum { CEC_SINGANL_FREETIME_STANDARD = 0x00, CEC_SINGANL_FREETIME_1T = 0x01, //!< 0.5 nominal data bit periods CEC_SINGANL_FREETIME_2T = 0x02, //!< 1.5 nominal data bit periods CEC_SINGANL_FREETIME_3T = 0x03, //!< 2.5 nominal data bit periods CEC_SINGANL_FREETIME_4T = 0x04, //!< 3.5 nominal data bit periods CEC_SINGANL_FREETIME_5T = 0x05, //!< 4.5 nominal data bit periods CEC_SINGANL_FREETIME_6T = 0x06, //!< 5.5 nominal data bit periods CEC_SINGANL_FREETIME_7T = 0x07, //!< 6.5 nominal data bit periods }CEC_SIGNAL_FREETIME_T; /** * @brief CEC_RxTolerance */ typedef enum { CEC_RX_TOLERANCE_STANDARD = 0x00, //!< Standard tolerance margin CEC_RX_TOLERANCE_EXTENDED = 0x01 //!< Extended Tolerance }CEC_RX_TOLERANCE_T; /** * @brief CEC_Stop_Reception */ typedef enum { CEC_STOP_RECEPTION_OFF, //!< CEC Stop Reception Off CEC_STOP_RECEPTION_ON //!< CEC Stop Reception On }CEC_STOP_RECEPTION_T; /** * @brief CEC_Bit_Rising_Error_Generation */ typedef enum { CEC_BIT_RISING_ERR_OFF, //!< BRE detection does not generate an Error-Bit on the CEC line CEC_BIT_RISING_ERR_ON //!< BRE detection generates an Error-Bit on the CEC line (if BRESTP is set) }CEC_BIT_RISING_ERR_T; /** * @brief CEC_Long_Bit_Error_Generation */ typedef enum { CEC_LONG_PERIOD_ERR_OFF, //!< LBPE detection does not generate an Error-Bit on the CEC line CEC_LONG_PERIOD_ERR_ON //!< LBPE detection generates an Error-Bit on the CEC line }CEC_LONG_PERIOD_ERR_T; /** * @brief CEC_BDR_No_Gen */ typedef enum { CEC_BROADCAST_NO_ERR_OFF, //!< Broadcast Bit Rising Error generation turned Off CEC_BROADCAST_NO_ERR_ON //!< Broadcast Bit Rising Error generation turned On }CEC_BROADCAST_NO_ERR_T; /** * @brief CEC_SFT_Option */ typedef enum { CEC_SIGNAL_FREETIME_OPTION_OFF, //!< SFTCFG timer starts when TXSOM is set by software CEC_SIGNAL_FREETIME_OPTION_ON //!< SFTCFG timer starts automatically at the end of message transmission/reception }CEC_SIGNAL_FREETIME_OPTION_T; /** * @brief CEC_Interrupt_Configuration_definition */ typedef enum { CEC_INT_RXBR = ((uint32_t)0x00000001), //!< Rx-Byte Received Interrupt CEC_INT_RXEND = ((uint32_t)0x00000002), //!< End Of Reception Interrupt CEC_INT_RXOVR = ((uint32_t)0x00000004), //!< Rx-Buffer Overrun Interrupt CEC_INT_BRE = ((uint32_t)0x00000008), //!< Bit Rising Error Interrupt CEC_INT_SBPE = ((uint32_t)0x00000010), //!< Short Bit Period Error Interrupt CEC_INT_LBPE = ((uint32_t)0x00000020), //!< Long Bit Period Error Interrupt CEC_INT_RXACKE = ((uint32_t)0x00000040), //!< Rx-Missing Acknowledge Error Interrupt CEC_INT_ARBLST = ((uint32_t)0x00000080), //!< Arbitration Lost Interrupt CEC_INT_TXBR = ((uint32_t)0x00000100), //!< Tx-Byte Request Interrupt CEC_INT_TXEND = ((uint32_t)0x00000200), //!< Tx-End Of Message Interrupt CEC_INT_TXUDR = ((uint32_t)0x00000400), //!< Tx-Underrun Interrupt CEC_INT_TXERR = ((uint32_t)0x00000800), //!< Tx-Error Interrupt CEC_INT_TXACKE = ((uint32_t)0x00001000), //!< Tx-Missing Acknowledge Error Interrupt }CEC_INT_T; /** * @brief CEC_STS_register_flags_definition */ typedef enum { CEC_FLAG_RXBR = ((uint32_t)0x00000001), //!< Rx-Byte Received Flag CEC_FLAG_RXEND = ((uint32_t)0x00000002), //!< End Of Reception Flag CEC_FLAG_RXOVR = ((uint32_t)0x00000004), //!< Rx-Buffer Overrun Flag CEC_FLAG_BRE = ((uint32_t)0x00000008), //!< Bit Rising Error Flag CEC_FLAG_SBPE = ((uint32_t)0x00000010), //!< Short Bit Period Error Flag CEC_FLAG_LBPE = ((uint32_t)0x00000020), //!< Long Bit Period Error Flag CEC_FLAG_RXACKE = ((uint32_t)0x00000040), //!< Rx-Missing Acknowledge Error Flag CEC_FLAG_ARBLST = ((uint32_t)0x00000080), //!< Arbitration Lost Flag CEC_FLAG_TXBR = ((uint32_t)0x00000100), //!< Tx-Byte Request Flag CEC_FLAG_TXEND = ((uint32_t)0x00000200), //!< Tx-End Of Message Flag CEC_FLAG_TXUDR = ((uint32_t)0x00000400), //!< Tx-Underrun Flag CEC_FLAG_TXERR = ((uint32_t)0x00000800), //!< Tx-Error Flag CEC_FLAG_TXACKE = ((uint32_t)0x00001000), //!< Tx-Missing Acknowledge Error Flag }CEC_FLAG_T; /**@} end of group CEC_Enumerations*/ /** @addtogroup CEC_Structure Data Structure @{ */ /** * @brief CEC Init structure definition */ typedef struct { CEC_SIGNAL_FREETIME_T signalFreeTime; //!< Signal Free Time CEC_RX_TOLERANCE_T RxTolerance; //!< Rx-Tolerance CEC_STOP_RECEPTION_T stopReception; //!< Rx-Stop on Bit Rising Error CEC_BIT_RISING_ERR_T bitRisingError; //!< Generate Error-Bit on Bit Rising Error CEC_LONG_PERIOD_ERR_T longPeriodError; //!< Generate Error-Bit on Long Bit Period Error CEC_BROADCAST_NO_ERR_T broadcastrNoGen; //!< Avoid Error-Bit Generation in Broadcast CEC_SIGNAL_FREETIME_OPTION_T signalFreeTimeOption;//!< Signal Free Time optional }CEC_Config_T; /**@} end of group CEC_Structure*/ /** @addtogroup CEC_Fuctions Fuctions @{ */ /** CEC reset and configuration */ void CEC_Reset(void); void CEC_Config(CEC_Config_T* cecConfig); void CEC_ConfigStructInit(CEC_Config_T* cecConfig); void CEC_Enable(void); void CEC_Disable(void); void CEC_EnableListenMode(void); void CEC_DisableListenMode(void); void CEC_ConfigOwnAddress(uint8_t ownAddress); void CEC_ClearQwnAddress(void); /** Transmit and receive */ void CEC_TxData(uint8_t Data); uint8_t CEC_RxData(void); /** Config Message */ void CEC_StartNewMessage(void); void CEC_CompleteMessage(void); /** Interrupt and Flag*/ void CEC_EnableInterrupt(uint32_t interrupt); void CEC_DisableInterrupt(uint32_t interrupt); uint8_t CEC_ReadStatusFlag(uint32_t flag); void CEC_ClearStatusFlag(uint32_t flag); uint8_t CEC_ReadIntFlag(uint16_t flag); void CEC_ClearIntFlag(uint16_t flag); /**@} end of group CEC_Fuctions*/ /**@} end of group CEC_Driver */ /**@} end of group Peripherals_Library*/ #ifdef __cplusplus } #endif #endif /* __CEC_H */