2021-12-02 16:00:09 +08:00

209 lines
6.5 KiB
C

/*!
* @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 */