HwA_Flagchip_FC7240/Inc/HwA_fcspi.h

479 lines
12 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file HwA_fcspi.h
* @author Flagchip
* @brief FC7xxx FCSPI hardware access layer
* @version 0.1.0
* @date 2024-01-13
*
* @copyright Copyright (c) 2023 Flagchip Semiconductors Co., Ltd.
*
* @details
*/
/* ********************************************************************************
* Revision History:
*
* Version Date Initials CR# Descriptions
* --------- ---------- ------------ ---------- ---------------
* 0.1.0 2024-01-12 Flagchip071 N/A First version for FC7240
******************************************************************************** */
#ifndef _HWA_FCSPI_H_
#define _HWA_FCSPI_H_
#include "device_header.h"
/**
* @addtogroup HwA_fcspi
* @{
*/
/**
* @brief Boolean false value definition for type FCSPI_AtomicBoolType used by FCSPI to ensure read/write atomic
*
*/
#define FCSPI_FALSE ((uint8_t)0)
/**
* @brief Boolean true value definition for type FCSPI_AtomicBoolType used by FCSPI to ensure read/write atomic
*
*/
#define FCSPI_TRUE ((uint8_t)1)
/********* Local typedef ************/
/**
* @brief FCSPI Mode type, master or slave.
*/
typedef enum {
FCSPI_MODE_SLAVE = 0,
FCSPI_MODE_MASTER = 1
} FCSPI_MasterSlaveModeType;
/**
* @brief Boolean type for FCSpi
*/
typedef uint8_t FCSPI_AtomicBoolType;
/********* Local inline function ************/
/**
* @brief Read the FCSPI CTRL register value for all.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @return FCSPI CTRL regsiter value.
*/
LOCAL_INLINE uint32_t FCSPI_HWA_GetCtrlValue(FCSPI_Type *pFCSPI)
{
return pFCSPI->CTRL;
}
/**
* @brief Set FCSPI CTRL value, users should write the whole value to this register.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @param u32Value the value which will be written to the CTRL register.
*/
LOCAL_INLINE void FCSPI_HWA_SetCtrlValue(FCSPI_Type *pFCSPI, uint32_t u32Value)
{
pFCSPI->CTRL = u32Value;
}
/**
* @brief Enable the feature of FCSPI hardware, only for starting the feature of SPI module.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
*/
LOCAL_INLINE void FCSPI_HWA_ModuleEnable(FCSPI_Type *pFCSPI)
{
pFCSPI->CTRL |= FCSPI_CTRL_M_EN(1);
}
/**
* @brief Disable the feature of FCSPI, and shutdown the FCSPI module.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
*/
LOCAL_INLINE void FCSPI_HWA_ModuleDisable(FCSPI_Type *pFCSPI)
{
pFCSPI->CTRL &= (~(FCSPI_CTRL_M_EN_MASK));
}
/**
* @brief Getting the FCSPI transfer status by reading the STATUS register.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @return the whole status of FCSPI transfer, which can be read in STATUS register.
*/
LOCAL_INLINE uint32_t FCSPI_HWA_GetStatus(FCSPI_Type *pFCSPI)
{
return pFCSPI->STATUS;
}
/**
* @brief Clear FCSPI STATUS register for certain function.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @param u32Value the value write to the register.
*/
LOCAL_INLINE void FCSPI_HWA_ClearStatus(FCSPI_Type *pFCSPI, uint32_t u32Value)
{
pFCSPI->STATUS = u32Value;
}
/**
* @brief Get FCSPI INT_EN register value for checking which interrupt is enabled.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @return FCSPI INT_EN regsiter value will be returned.
*/
LOCAL_INLINE uint32_t FCSPI_HWA_GetIntrruptEnableReg(FCSPI_Type *pFCSPI)
{
return pFCSPI->INT_EN;
}
/**
* @brief Set the FCSPI INT_EN register value for enable or disable some interrupts.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @param u32Value the value write to the register.
*/
LOCAL_INLINE void FCSPI_HWA_SetInterruptEnableReg(FCSPI_Type *pFCSPI, uint32_t u32Value)
{
pFCSPI->INT_EN = u32Value;
}
/**
* @brief Getting the DMA enabled status through the regsiter FCSPI DMA_EN value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @return FCSPI DMA_EN regsiter value
*/
LOCAL_INLINE uint32_t FCSPI_HWA_GetDMAEnableReg(FCSPI_Type *pFCSPI)
{
return pFCSPI->DMA_EN;
}
/**
* @brief Enable or disable the DMA feature by setting the FCSPI DMA_EN register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @param u32Value the value write to the register.
*/
LOCAL_INLINE void FCSPI_HWA_SetDMAEnableReg(FCSPI_Type *pFCSPI, uint32_t u32Value)
{
pFCSPI->DMA_EN = u32Value;
}
/**
* @brief Get FCSPI CFG0 register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @return FCSPI CFG0 regsiter value
*/
LOCAL_INLINE uint32_t FCSPI_HWA_GetCFG0Reg(FCSPI_Type *pFCSPI)
{
return pFCSPI->CFG0;
}
/**
* @brief Set FCSPI CFG0 register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @param u32Value the value write to the register.
*/
LOCAL_INLINE void FCSPI_HWA_SetCFG0Reg(FCSPI_Type *pFCSPI, uint32_t u32Value)
{
pFCSPI->CFG0 = u32Value;
}
/**
* @brief Get FCSPI CFG1 register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @return FCSPI CFG1 regsiter value
*/
LOCAL_INLINE uint32_t FCSPI_HWA_GetCFG1Reg(FCSPI_Type *pFCSPI)
{
return pFCSPI->CFG1;
}
/**
* @brief Set FCSPI CFG1 register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @param u32Value the value write to the register.
*/
LOCAL_INLINE void FCSPI_HWA_SetCFG1Reg(FCSPI_Type *pFCSPI, uint32_t u32Value)
{
pFCSPI->CFG1 = u32Value;
}
/**
* @brief Set the FCSPI to master mode.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
*/
LOCAL_INLINE void FCSPI_HWA_SetMasterMode(FCSPI_Type *pFCSPI)
{
pFCSPI->CFG1 |= FCSPI_CFG1_MASTER(1);
}
/**
* @brief Set FCSPI to slave mode.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
*/
LOCAL_INLINE void FCSPI_HWA_SetSlaveMode(FCSPI_Type *pFCSPI)
{
pFCSPI->CFG1 &= (~(FCSPI_CFG1_MASTER_MASK));
}
/**
* @brief Check the current mode status, master or slave.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @return the mode type of FCSPI, FCSPI_MODE_MASTER or FCSPI_MODE_SLAVE
*/
LOCAL_INLINE FCSPI_MasterSlaveModeType FCSPI_HWA_CheckMode(FCSPI_Type *pFCSPI)
{
FCSPI_MasterSlaveModeType eRet = FCSPI_MODE_SLAVE;
if ((pFCSPI->CFG1 & FCSPI_CFG1_MASTER_MASK) == FCSPI_CFG1_MASTER(1))
{
eRet = FCSPI_MODE_MASTER;
}
return eRet;
}
/**
* @brief Get FCSPI MATCH0 register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @return FCSPI MATCH0 regsiter value
*/
LOCAL_INLINE uint32_t FCSPI_HWA_GetMatch0Value(FCSPI_Type *pFCSPI)
{
return pFCSPI->DATA_MATCH0;
}
/**
* @brief Set FCSPI MATCH0 register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @param u32Value the value write to the register.
*/
LOCAL_INLINE void FCSPI_HWA_SetMatch0Value(FCSPI_Type *pFCSPI, uint32_t u32Value)
{
pFCSPI->DATA_MATCH0 = u32Value;
}
/**
* @brief Get FCSPI MATCH1 register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @return FCSPI MATCH1 regsiter value
*/
LOCAL_INLINE uint32_t FCSPI_HWA_GetMatch1Value(FCSPI_Type *pFCSPI)
{
return pFCSPI->DATA_MATCH1;
}
/**
* @brief Set FCSPI MATCH1 register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @param u32Value the value write to the register.
*/
LOCAL_INLINE void FCSPI_HWA_SetMatch1Value(FCSPI_Type *pFCSPI, uint32_t u32Value)
{
pFCSPI->DATA_MATCH1 = u32Value;
}
/**
* @brief Get FCSPI CLK_CFG register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @return FCSPI CLK_CFG regsiter value
*/
LOCAL_INLINE uint32_t FCSPI_HWA_GetClockConfig(FCSPI_Type *pFCSPI)
{
return pFCSPI->CLK_CFG;
}
/**
* @brief Set FCSPI CLK_CFG register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @param u32Value the value write to the register.
*/
LOCAL_INLINE void FCSPI_HWA_SetClockConfig(FCSPI_Type *pFCSPI, uint32_t u32Value)
{
pFCSPI->CLK_CFG = u32Value;
}
/**
* @brief Get FCSPI FIFO_WTM register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @return FCSPI FIFO_WTM regsiter value
*/
LOCAL_INLINE uint32_t FCSPI_HWA_GetFIFOWaterMark(FCSPI_Type *pFCSPI)
{
return pFCSPI->FIFO_WTM;
}
/**
* @brief Set FCSPI FIFO_WTM register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @param u8RxWatermark the rx water mark value.
* @param u8TxWatermark the tx water mark value.
*/
LOCAL_INLINE void FCSPI_HWA_SetWatermark(FCSPI_Type *pFCSPI, uint8_t u8RxWatermark, uint8_t u8TxWatermark)
{
uint32_t u32Flag = 0U;
u32Flag |= ((uint32_t)u8RxWatermark << FCSPI_FIFO_WTM_RXWATER_SHIFT);
u32Flag |= ((uint32_t)u8TxWatermark << FCSPI_FIFO_WTM_TXWATER_SHIFT);
pFCSPI->FIFO_WTM = u32Flag;
}
/**
* @brief Get FCSPI RX FIFO count.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @return the real count value of rx fifo.
*/
LOCAL_INLINE uint8_t FCSPI_HWA_GetRxFifoStoredCount(FCSPI_Type *pFCSPI)
{
return (uint8_t)(((pFCSPI->FIFO_STATUS) & FCSPI_FIFO_STATUS_RXCNT_MASK) >> FCSPI_FIFO_STATUS_RXCNT_SHIFT);
}
/**
* @brief Get FCSPI TX FIFO count value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @return the real count of tx fifo.
*/
LOCAL_INLINE uint8_t FCSPI_HWA_GetTxFifoStoredCount(FCSPI_Type *pFCSPI)
{
return (uint8_t)(((pFCSPI->FIFO_STATUS) & FCSPI_FIFO_STATUS_TXCNT_MASK) >> FCSPI_FIFO_STATUS_TXCNT_SHIFT);
}
/**
* @brief Get FCSPI TR_CTRL register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @return FCSPI TR_CTRL regsiter value
*/
LOCAL_INLINE uint32_t FCSPI_HWA_GetTxRxControl(FCSPI_Type *pFCSPI)
{
return pFCSPI->TR_CTRL;
}
/**
* @brief Set FCSPI TR_CTRL register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @param u32Value the value write to the register.
*/
LOCAL_INLINE void FCSPI_HWA_SetTxRxControl(FCSPI_Type *pFCSPI, uint32_t u32Value)
{
pFCSPI->TR_CTRL = u32Value;
}
/**
* @brief Set RX enable status in register FCSPI TR_CTRL.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @param eEnable FCSPI_TRUE for enabled, FCSPI_FALSE for disable.
*/
LOCAL_INLINE void FCSPI_HWA_EnableRxDataMask(FCSPI_Type *pFCSPI, FCSPI_AtomicBoolType eEnable)
{
if (FCSPI_FALSE == eEnable)
{
pFCSPI->TR_CTRL |= FCSPI_TR_CTRL_RX_MSK_MASK;
}
else
{
pFCSPI->TR_CTRL &= (~(FCSPI_TR_CTRL_RX_MSK_MASK));
}
}
/**
* @brief Set TX enable status in register FCSPI TR_CTRL.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @param eEnable FCSPI_TRUE for enabled, FCSPI_FALSE for disable.
*/
LOCAL_INLINE void FCSPI_HWA_EnableTxDataMask(FCSPI_Type *pFCSPI, FCSPI_AtomicBoolType eEnable)
{
if (FCSPI_FALSE == eEnable)
{
pFCSPI->TR_CTRL |= FCSPI_TR_CTRL_TX_MSK_MASK;
}
else
{
pFCSPI->TR_CTRL &= (~(FCSPI_TR_CTRL_TX_MSK_MASK));
}
}
/**
* @brief Set FCSPI TX_DATA register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @param u32Value the value write to the register.
*/
LOCAL_INLINE void FCSPI_HWA_WriteData(FCSPI_Type *pFCSPI, uint32_t u32Value)
{
pFCSPI->TX_DATA = u32Value;
}
/**
* @brief Get the address of FCSPI TX_DATA register,return value is the pointer address of TX_DATA.
*
* @param pFCSPI FCSPI instancee.g. FCSPI0, FCSPI1.
* @return FCSPI TX_DATA address.
*/
LOCAL_INLINE uint32_t volatile *FCSPI_HWA_GetTxDataAddr(FCSPI_Type *pFCSPI)
{
return (uint32_t volatile *)&(pFCSPI->TX_DATA);
}
/**
* @brief Read FCSPI RX_STATUS register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @return FCSPI RX_STATUS regsiter value
*/
LOCAL_INLINE uint32_t FCSPI_HWA_GetRxStatus(FCSPI_Type *pFCSPI)
{
return pFCSPI->RX_STATUS;
}
/**
* @brief Read FCSPI RX_DATA register value.
*
* @param pFCSPI FCSPI instance, e.g. FCSPI0, FCSPI1.
* @return FCSPI RX_DATA regsiter value
*/
LOCAL_INLINE uint32_t FCSPI_HWA_ReadData(FCSPI_Type *pFCSPI)
{
return pFCSPI->RX_DATA;
}
/**
* @brief Get the address of FCSPI RX_DATA register,return value is the pointer address of RX_DATA.
*
* @param pFCSPI FCSPI instancee.g. FCSPI0, FCSPI1.
* @return FCSPI RX_DATA address.
*/
LOCAL_INLINE uint32_t volatile const *FCSPI_HWA_GetRxDataAddr(FCSPI_Type *pFCSPI)
{
return &(pFCSPI->RX_DATA);
}
#endif /* #ifndef _HWA_FCPIT_H_ */