543 lines
14 KiB
C
543 lines
14 KiB
C
/**
|
|
* @file HwA_fciic.h
|
|
* @author Flagchip
|
|
* @brief FC7xxx FCIIC hardware access layer
|
|
* @version 0.2.0
|
|
* @date 2023-2-14
|
|
*
|
|
* @copyright Copyright (c) 2022 Flagchip Semiconductors Co., Ltd.
|
|
*
|
|
*/
|
|
/* ********************************************************************************
|
|
* Revision History:
|
|
*
|
|
* Version Date Initials CR# Descriptions
|
|
* --------- ---------- ------------ ---------- ---------------
|
|
* 0.1.0 2022/12/31 qxw0052 N/A First version for FC7300
|
|
* 0.2.0 2023/02/14 qxw0052 N/A Fix MISRA issues
|
|
******************************************************************************** */
|
|
|
|
#ifndef _HWA_FCIIC_H_
|
|
#define _HWA_FCIIC_H_
|
|
|
|
#include "device_header.h"
|
|
|
|
|
|
/**
|
|
* @addtogroup HwA_fciic
|
|
* @{
|
|
*/
|
|
|
|
|
|
/* ################################################################################## */
|
|
/* ################################### type define ################################## */
|
|
|
|
|
|
/**
|
|
* \brief IIC Command Type Enumeration
|
|
*
|
|
*/
|
|
typedef enum
|
|
{
|
|
FCIIC_TX_CMD_TRANSMIT = 0, /**< FCIIC_TX_CMD_TRANSMIT transmit command */
|
|
FCIIC_TX_CMD_RECEIVE, /**< FCIIC_TX_CMD_RECEIVE receive command*/
|
|
FCIIC_TX_CMD_STOP, /**< FCIIC_TX_CMD_STOP stop command */
|
|
FCIIC_TX_CMD_RECANDDISCARD, /**< FCIIC_TX_CMD_RECANDDISCARD receive and discard data command*/
|
|
FCIIC_TX_CMD_STARTANDTRANSMIT, /**< FCIIC_TX_CMD_STARTANDTRANSMIT start and then transmit data */
|
|
FCIIC_TX_CMD_STARTANDTRANSMIT_WITHNAK/**< FCIIC_TX_CMD_STARTANDTRANSMIT_WITHNAK start and then transmit and don't care ACK */
|
|
|
|
} FCIIC_TX_CMDType;
|
|
|
|
|
|
/**
|
|
* \brief IIC Master status type enumeration
|
|
*
|
|
*/
|
|
typedef enum
|
|
{
|
|
FCIIC_MSR_BBF_STATUS = 25U, /**< FCIIC_MSR_BBF_STATUS Bus Busy Flag */
|
|
FCIIC_MSR_MBF_STATUS = 24U, /**< FCIIC_MSR_MBF_STATUS Master Busy Flag */
|
|
FCIIC_MSR_DMF_STATUS = 14U, /**< FCIIC_MSR_DMF_STATUS Data Match Flag */
|
|
FCIIC_MSR_PLTF_STATUS = 13U, /**< FCIIC_MSR_PLTF_STATUS Pin Low Timeout Flag */
|
|
FCIIC_MSR_FEF_STATUS = 12U, /**< FCIIC_MSR_FEF_STATUS FIFO Error Flag */
|
|
FCIIC_MSR_ALF_STATUS = 11U, /**< FCIIC_MSR_ALF_STATUS Arbitration Lost Flag */
|
|
FCIIC_MSR_NDF_STATUS = 10U, /**< FCIIC_MSR_NDF_STATUS NACK Detect Flag */
|
|
FCIIC_MSR_SDF_STATUS = 9U, /**< FCIIC_MSR_SDF_STATUS STOP Detect Flag */
|
|
FCIIC_MSR_EPF_STATUS = 8U, /**< FCIIC_MSR_EPF_STATUS End Packet Flag */
|
|
FCIIC_MSR_RXFPEF_STATUS = 3U, /**< FCIIC_MSR_EPF_STATUS RX FIFO Parity Error Flag */
|
|
FCIIC_MSR_TXFPEF_STATUS = 2U, /**< FCIIC_MSR_EPF_STATUS TX FIFO Parity Error Flag */
|
|
FCIIC_MSR_RDF_STATUS = 1U, /**< FCIIC_MSR_RDF_STATUS Receive Data Flag */
|
|
FCIIC_MSR_TDF_STATUS = 0U /**< FCIIC_MSR_TDF_STATUS Transmit Data Flag */
|
|
} FCIIC_MasterStatusType;
|
|
|
|
|
|
|
|
/**
|
|
* \brief IIC Slave status type enumeration
|
|
*
|
|
*/
|
|
typedef enum
|
|
{
|
|
FCIIC_SSR_BBF_STATUS = 25U, /**< FCIIC_SSR_BBF_STATUS Bus Busy Flag */
|
|
FCIIC_SSR_SBF_STATUS = 24U, /**< FCIIC_SSR_SBF_STATUS Slave Busy Flag */
|
|
FCIIC_SSR_SARF_STATUS = 15U, /**< FCIIC_SSR_SARF_STATUS SMBus Alert Response Flag */
|
|
FCIIC_SSR_GCF_STATUS = 14U, /**< FCIIC_SSR_GCF_STATUS General Call Flag */
|
|
FCIIC_SSR_AM1F_STATUS = 13U, /**< FCIIC_SSR_AM1F_STATUS Address Match 1 Flag */
|
|
FCIIC_SSR_AM0F_STATUS = 12U, /**< FCIIC_SSR_AM0F_STATUS Address Match 0 Flag */
|
|
FCIIC_SSR_TREF_STATUS = 11U, /**< FCIIC_SSR_TREF_STATUS FIFO Error Flag */
|
|
FCIIC_SSR_BEF_STATUS = 10U, /**< FCIIC_SSR_BEF_STATUS Bit Error Flag */
|
|
FCIIC_SSR_SDF_STATUS = 9U, /**< FCIIC_SSR_SDF_STATUS STOP Detect Flag */
|
|
FCIIC_SSR_RSF_STATUS = 8U, /**< FCIIC_SSR_RSF_STATUS Repeated Start Flag */
|
|
FCIIC_SSR_TAF_STATUS = 3U, /**< FCIIC_SSR_TAF_STATUS Transmit ACK Flag */
|
|
FCIIC_SSR_AVF_STATUS = 2U, /**< FCIIC_SSR_AVF_STATUS Address Valid Flag */
|
|
FCIIC_SSR_RDF_STATUS = 1U, /**< FCIIC_SSR_RDF_STATUS Receive Data Flag */
|
|
FCIIC_SSR_TDF_STATUS = 0U, /**< FCIIC_SSR_TDF_STATUS Transmit Data Flag */
|
|
} FCIIC_SlaveStatusType;
|
|
|
|
|
|
/**
|
|
* \brief Master Transmit Data
|
|
*
|
|
* \param pFciic IIC instance value
|
|
* \param tCmdType is command type
|
|
* \param u8Data to transmit
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Master_HWA_Transmit(FCIIC_Type *pFciic, FCIIC_TX_CMDType tCmdType, uint8_t u8Data)
|
|
{
|
|
pFciic->MTDR = FCIIC_MTDR_CMD(tCmdType) | FCIIC_MTDR_DATA(u8Data);
|
|
}
|
|
|
|
/**
|
|
* \brief Master Receive Data
|
|
*
|
|
* \param pFciic IIC instance value
|
|
* \return the data received
|
|
*/
|
|
LOCAL_INLINE uint8_t FCIIC_Master_HWA_Receive(FCIIC_Type *pFciic)
|
|
{
|
|
/* copy data */
|
|
return (uint8_t)((uint8_t)(pFciic->MRDR) & 0xFFU);
|
|
}
|
|
|
|
/**
|
|
* \brief Get and clear IIC master status
|
|
*
|
|
* \param pFciic is IIC instance value
|
|
* \param eStatus is status type
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Master_HwA_CheckClearStatus(FCIIC_Type *pFciic, FCIIC_MasterStatusType eStatus)
|
|
{
|
|
uint32_t u32RetVal;
|
|
|
|
u32RetVal = (pFciic->MSR >> eStatus) & 0x01U;
|
|
|
|
|
|
if (u32RetVal != 0U)
|
|
{
|
|
pFciic->MSR |= (1UL << eStatus); /* w1c */
|
|
}
|
|
}
|
|
|
|
/**
|
|
* \brief This Function is used to get master status
|
|
*
|
|
* \param pFciic is IIC instance value
|
|
* \param eStatus is status type enumeration
|
|
* \return Status value 0 or 1 and 1 is OK
|
|
*/
|
|
LOCAL_INLINE uint8_t FCIIC_Master_HWA_GetStatus(FCIIC_Type *pFciic, FCIIC_MasterStatusType eStatus)
|
|
{
|
|
uint32_t u32RetVal;
|
|
|
|
u32RetVal = (pFciic->MSR >> (uint32_t)eStatus) & 0x01U;
|
|
|
|
return (uint8_t)(u32RetVal == 1U ? 1U : 0U);
|
|
}
|
|
|
|
/**
|
|
* \brief This Function is used to clear master status
|
|
*
|
|
* \param pFciic is IIC instance value
|
|
* \param u32Value is the clear bits
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Master_HWA_ClrStatus(FCIIC_Type *pFciic, uint32_t u32Value)
|
|
{
|
|
pFciic->MSR |= u32Value;
|
|
}
|
|
|
|
/**
|
|
* \brief This Function is used to get slave status
|
|
*
|
|
* \param pFciic is IIC instance value
|
|
* \param eStatus is status type enumeration
|
|
* \return Status value 0 or 1 and 1 is OK
|
|
*/
|
|
LOCAL_INLINE uint8_t FCIIC_Slave_HWA_GetStatus(FCIIC_Type *pFciic, FCIIC_SlaveStatusType eStatus)
|
|
{
|
|
uint32_t u32RetVal;
|
|
|
|
u32RetVal = (pFciic->SSR >> (uint32_t)eStatus) & 0x01U;
|
|
|
|
return (uint8_t)(u32RetVal == 1U ? 1U : 0U);
|
|
}
|
|
|
|
/**
|
|
* \brief This Function is used to clear slave status
|
|
*
|
|
* \param pFciic is IIC instance value
|
|
* \param u32Value is the clear bits value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Slave_HWA_ClrStatus(FCIIC_Type *pFciic, uint32_t u32Value)
|
|
{
|
|
pFciic->SSR |= u32Value;
|
|
}
|
|
|
|
/**
|
|
* \brief Slave Transmit Data
|
|
*
|
|
* \param pFciic IIC instance value
|
|
* \param u8Data to transmit
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Slave_HWA_Transmit(FCIIC_Type *pFciic, uint8_t u8Data)
|
|
{
|
|
pFciic->STDR = FCIIC_STDR_DATA(u8Data);
|
|
}
|
|
|
|
|
|
/**
|
|
* \brief Slave Get Data
|
|
*
|
|
* \param pFciic IIC instance value
|
|
* \return the data value
|
|
*/
|
|
LOCAL_INLINE uint8_t FCIIC_Slave_HWA_Receive(FCIIC_Type *pFciic)
|
|
{
|
|
/* copy data */
|
|
return (uint8_t)((uint8_t)(pFciic->SRDR) & 0xFFU);
|
|
}
|
|
|
|
/**
|
|
* \brief Enable Receive Interrupt
|
|
*
|
|
* \param pFciic IIC instance value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Master_HWA_EnableReceiveInterrupt(FCIIC_Type *pFciic)
|
|
{
|
|
pFciic->MIER |= FCIIC_MIER_RDIE_MASK;
|
|
}
|
|
|
|
/**
|
|
* \brief Disable Receive Interrupt
|
|
*
|
|
* \param pFciic IIC instance value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Master_HWA_DisableReceiveInterrupt(FCIIC_Type *pFciic)
|
|
{
|
|
pFciic->MIER &= ~FCIIC_MIER_RDIE_MASK;
|
|
}
|
|
|
|
/**
|
|
* \brief Enable Error Interrupt
|
|
*
|
|
* \param pFciic IIC instance value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Master_HWA_EnableErrorInterrupt(FCIIC_Type *pFciic)
|
|
{
|
|
pFciic->MIER |= FCIIC_MIER_FEIE_MASK;
|
|
}
|
|
|
|
/**
|
|
* \brief Disable Error Interrupt
|
|
*
|
|
* \param pFciic IIC instance value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Master_HWA_DisableErrorInterrupt(FCIIC_Type *pFciic)
|
|
{
|
|
pFciic->MIER &= FCIIC_MIER_FEIE_MASK;
|
|
}
|
|
|
|
/**
|
|
* \brief Get Error Flag
|
|
*
|
|
* \param pFciic IIC instance value
|
|
*/
|
|
LOCAL_INLINE uint32_t FCIIC_Master_HWA_GetErrorFlag(FCIIC_Type *pFciic)
|
|
{
|
|
return pFciic->MSR & FCIIC_MSR_FEF_MASK;
|
|
}
|
|
|
|
/**
|
|
* \brief Clr Error Flag
|
|
*
|
|
* \param pFciic IIC instance value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Master_HWA_ClrErrorFlag(FCIIC_Type *pFciic)
|
|
{
|
|
pFciic->MSR |= FCIIC_MSR_FEF_MASK;
|
|
}
|
|
|
|
/**
|
|
* \brief Enable Transmit Interrupt
|
|
*
|
|
* \param pFciic IIC instance value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Master_HWA_EnableTransmitInterrupt(FCIIC_Type *pFciic)
|
|
{
|
|
pFciic->MIER |= FCIIC_MIER_TDIE_MASK;
|
|
}
|
|
|
|
/**
|
|
* \brief Disable Transmit Interrupt
|
|
*
|
|
* \param pFciic IIC instance value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Master_HWA_DisableTransmitInterrupt(FCIIC_Type *pFciic)
|
|
{
|
|
pFciic->MIER &= ~FCIIC_MIER_TDIE_MASK;
|
|
}
|
|
|
|
|
|
/**
|
|
* \brief Enable Receive Interrupt
|
|
*
|
|
* \param pFciic IIC instance value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Slave_HWA_EnableReceiveInterrupt(FCIIC_Type *pFciic)
|
|
{
|
|
pFciic->SIER |= FCIIC_SIER_RDIE_MASK;
|
|
}
|
|
|
|
/**
|
|
* \brief Disable Receive Interrupt
|
|
*
|
|
* \param pFciic IIC instance value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Slave_HWA_DisableReceiveInterrupt(FCIIC_Type *pFciic)
|
|
{
|
|
pFciic->SIER &= ~FCIIC_SIER_RDIE_MASK;
|
|
}
|
|
|
|
/**
|
|
* \brief Enable Error Interrupt
|
|
*
|
|
* \param pFciic IIC instance value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Slave_HWA_EnableErrorInterrupt(FCIIC_Type *pFciic)
|
|
{
|
|
pFciic->SIER |= FCIIC_SIER_TREIE_MASK | FCIIC_SIER_BEIE_MASK ;
|
|
}
|
|
|
|
/**
|
|
* \brief Disable Error Interrupt
|
|
*
|
|
* \param pFciic IIC instance value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Slave_HWA_DisableErrorInterrupt(FCIIC_Type *pFciic)
|
|
{
|
|
pFciic->SIER &= ~(FCIIC_SIER_TREIE_MASK | FCIIC_SIER_BEIE_MASK);
|
|
}
|
|
|
|
/**
|
|
* \brief Get Error Flag
|
|
*
|
|
* \param pFciic IIC instance value
|
|
*/
|
|
LOCAL_INLINE uint32_t FCIIC_Slave_HWA_GetErrorFlag(FCIIC_Type *pFciic)
|
|
{
|
|
return pFciic->SSR & (FCIIC_SSR_TREF_MASK | FCIIC_SSR_BEF_MASK);
|
|
}
|
|
|
|
/**
|
|
* \brief Clear Error Flag
|
|
*
|
|
* \param pFciic IIC instance value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Slave_HWA_ClrErrorFlag(FCIIC_Type *pFciic)
|
|
{
|
|
pFciic->SSR |= (FCIIC_SSR_TREF_MASK | FCIIC_SSR_BEF_MASK);
|
|
}
|
|
|
|
/**
|
|
* \brief Enable Transmit Interrupt
|
|
*
|
|
* \param pFciic IIC instance value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Slave_HWA_EnableTransmitInterrupt(FCIIC_Type *pFciic)
|
|
{
|
|
pFciic->SIER |= FCIIC_SIER_TDIE_MASK;
|
|
}
|
|
|
|
/**
|
|
* \brief FCIIC Disable Transmit Interrupt
|
|
*
|
|
* \param pFciic IIC instance value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_Slave_HWA_DisableTransmitInterrupt(FCIIC_Type *pFciic)
|
|
{
|
|
pFciic->SIER &= ~FCIIC_SIER_TDIE_MASK; /* Receive Interrupt Enable */
|
|
}
|
|
|
|
|
|
/**
|
|
* \brief Set FCIIC MCR register
|
|
*
|
|
* \param pFciic FCIIC instance value
|
|
* \param u32Value written value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_HWA_SetMcr(FCIIC_Type *pFciic, uint32_t u32Value)
|
|
{
|
|
pFciic->MCR = u32Value;
|
|
}
|
|
|
|
/**
|
|
* \brief Attach FCIIC MCR register
|
|
*
|
|
* \param pFciic FCIIC instance value
|
|
* \param u32Value written value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_HWA_AttachMcr(FCIIC_Type *pFciic, uint32_t u32Value)
|
|
{
|
|
pFciic->MCR |= u32Value;
|
|
}
|
|
|
|
|
|
/**
|
|
* \brief Set FCIIC MDER register
|
|
*
|
|
* \param pFciic FCIIC instance value
|
|
* \param u32Value written value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_HWA_SetMder(FCIIC_Type *pFciic, uint32_t u32Value)
|
|
{
|
|
pFciic->MDER = u32Value;
|
|
}
|
|
|
|
/**
|
|
* \brief Set FCIIC MCFGR0 register
|
|
*
|
|
* \param pFciic FCIIC instance value
|
|
* \param u32Value written value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_HWA_SetMCFGR0(FCIIC_Type *pFciic, uint32_t u32Value)
|
|
{
|
|
pFciic->MCFGR0 = u32Value;
|
|
}
|
|
|
|
/**
|
|
* \brief Set FCIIC MCFGR1 register
|
|
*
|
|
* \param pFciic FCIIC instance value
|
|
* \param u32Value written value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_HWA_SetMCFGR1(FCIIC_Type *pFciic, uint32_t u32Value)
|
|
{
|
|
pFciic->MCFGR1 = u32Value;
|
|
}
|
|
|
|
/**
|
|
* \brief Set FCIIC MCFGR2 register
|
|
*
|
|
* \param pFciic FCIIC instance value
|
|
* \param u32Value written value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_HWA_SetMCFGR2(FCIIC_Type *pFciic, uint32_t u32Value)
|
|
{
|
|
pFciic->MCFGR2 = u32Value;
|
|
}
|
|
|
|
/**
|
|
* \brief Set FCIIC MCFGR3 register
|
|
*
|
|
* \param pFciic FCIIC instance value
|
|
* \param u32Value written value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_HWA_SetMCFGR3(FCIIC_Type *pFciic, uint32_t u32Value)
|
|
{
|
|
pFciic->MCFGR3 = u32Value;
|
|
}
|
|
|
|
/**
|
|
* \brief Set FCIIC MFCR register
|
|
*
|
|
* \param pFciic FCIIC instance value
|
|
* \param u32Value written value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_HWA_SetMFCR(FCIIC_Type *pFciic, uint32_t u32Value)
|
|
{
|
|
pFciic->MFCR = u32Value;
|
|
}
|
|
|
|
/**
|
|
* \brief Set FCIIC MCCR register
|
|
*
|
|
* \param pFciic FCIIC instance value
|
|
* \param u32Value written value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_HWA_SetMCCR(FCIIC_Type *pFciic, uint32_t u32Value)
|
|
{
|
|
pFciic->MCCR = u32Value;
|
|
}
|
|
|
|
/**
|
|
* \brief Set FCIIC SDER register
|
|
*
|
|
* \param pFciic FCIIC instance value
|
|
* \param u32Value written value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_HWA_SetSDER(FCIIC_Type *pFciic, uint32_t u32Value)
|
|
{
|
|
pFciic->SDER = u32Value;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* \brief Set FCIIC SCFGR1 register
|
|
*
|
|
* \param pFciic FCIIC instance value
|
|
* \param u32Value written value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_HWA_SetSCFGR1(FCIIC_Type *pFciic, uint32_t u32Value)
|
|
{
|
|
pFciic->SCFGR1 = u32Value;
|
|
}
|
|
|
|
/**
|
|
* \brief Set FCIIC MCCR register
|
|
*
|
|
* \param pFciic FCIIC instance value
|
|
* \param u32Value written value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_HWA_SetSCFGR2(FCIIC_Type *pFciic, uint32_t u32Value)
|
|
{
|
|
pFciic->SCFGR2 = u32Value;
|
|
}
|
|
|
|
/**
|
|
* \brief Set FCIIC MCCR register
|
|
*
|
|
* \param pFciic FCIIC instance value
|
|
* \param u32Value written value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_HWA_SetSAMR(FCIIC_Type *pFciic, uint32_t u32Value)
|
|
{
|
|
pFciic->SAMR = u32Value;
|
|
}
|
|
|
|
/**
|
|
* \brief Set FCIIC MCCR register
|
|
*
|
|
* \param pFciic FCIIC instance value
|
|
* \param u32Value written value
|
|
*/
|
|
LOCAL_INLINE void FCIIC_HWA_SetSCR(FCIIC_Type *pFciic, uint32_t u32Value)
|
|
{
|
|
pFciic->SCR = u32Value;
|
|
}
|
|
|
|
|
|
|
|
/** @}*/
|
|
|
|
#endif /* end for #ifndef _HWA_FCIIC_H_ */
|