283 lines
6.7 KiB
C
283 lines
6.7 KiB
C
/**
|
|
* @file HwA_port.h
|
|
* @author Flagchip
|
|
* @brief PORT hardware access layer
|
|
* @version 2.0.0
|
|
* @date 2024-08-20
|
|
*
|
|
* SDK Version: 2.6.0
|
|
*
|
|
|
|
* @copyright Copyright (c) 2020-2024 Flagchip Semiconductors Co., Ltd.
|
|
*
|
|
* @details
|
|
*/
|
|
/* ********************************************************************************
|
|
* Revision History:
|
|
*
|
|
* Version Date Initials CR# Descriptions
|
|
* --------- ---------- ------------ ---------- ---------------
|
|
* 0.1.0 2023-12-15 Flagchip071 N/A First version for FC7300
|
|
* 2.0.0 2024-10-12 Flagchip071 N/A Change version and release
|
|
******************************************************************************** */
|
|
|
|
#ifndef _HWA_PORT_H_
|
|
#define _HWA_PORT_H_
|
|
|
|
#include "device_header.h"
|
|
|
|
#if PORT_INSTANCE_COUNT > 0U
|
|
|
|
/**
|
|
* @defgroup HwA_port HwA_port
|
|
* @ingroup module_driver_port
|
|
* @{
|
|
*/
|
|
|
|
/********* Local inline function ************/
|
|
/**
|
|
* @brief Configure pin
|
|
*
|
|
* @param pPort Port instance
|
|
* @param u8Pin Pin number
|
|
* @param u32PcrReg Pin PCR register value
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_ConfigPin(PORT_Type *pPort, uint8_t u8Pin, uint32_t u32PcrReg)
|
|
{
|
|
pPort->PCR[u8Pin] = u32PcrReg;
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief Read pin interrupt flag
|
|
*
|
|
* @param pPort Port instance
|
|
* @param u8Pin Pin number
|
|
* @return interrupt flag value
|
|
*/
|
|
LOCAL_INLINE uint32_t PORT_HWA_ReadPinInterruptFlag(PORT_Type *pPort, uint8_t u8Pin)
|
|
{
|
|
return pPort->PCR[u8Pin] & (uint32_t)PORT_PCR_ISF_MASK;
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief Set pin multiplexing
|
|
*
|
|
* @param pPort Port instance
|
|
* @param u8Pin Pin number
|
|
* @param Port_PinMuxType Pin MXU configuration value
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_SetPinMux(PORT_Type *pPort, uint8_t u8Pin, Port_PinMuxType u32PinMux)
|
|
{
|
|
uint32_t u32TempRegVal = (uint32_t)(pPort->PCR[u8Pin]);
|
|
pPort->PCR[u8Pin] = ((u32TempRegVal & ~(uint32_t)PORT_PCR_MUX_MASK) | PORT_PCR_MUX(u32PinMux.u32PortPinMode));
|
|
}
|
|
|
|
/**
|
|
* @brief Set Pin Emergency Stop
|
|
*
|
|
* @param pPort Port instance
|
|
* @param u8Pin Pin number
|
|
* @param bEnable Enable or Disable Emergency Stop of this Pin
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_SetPinEmgcyStop(PORT_Type *pPort, uint8_t u8Pin, bool bEnable)
|
|
{
|
|
uint32_t u32TempRegVal = (uint32_t)(pPort->PCR[u8Pin]);
|
|
pPort->PCR[u8Pin] = (u32TempRegVal & (~ (uint32_t)PORT_PCR_ESTOP_MASK)) | PORT_PCR_ESTOP(bEnable);
|
|
}
|
|
|
|
/**
|
|
* @brief Set pin interrupt mode
|
|
*
|
|
* @param pPort Port instance
|
|
* @param u8Pin Pin number
|
|
* @param u32PinIrqc Pin IRQC configuration value
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_SetPinInterruptMode(PORT_Type *pPort, uint8_t u8Pin, uint32_t u32PinIrqc)
|
|
{
|
|
uint32_t u32TempRegVal = (uint32_t)(pPort->PCR[u8Pin]);
|
|
pPort->PCR[u8Pin] = ((u32TempRegVal & ~(uint32_t)PORT_PCR_IRQC_MASK) | PORT_PCR_IRQC(u32PinIrqc));
|
|
}
|
|
|
|
/**
|
|
* @brief Set pin pull enable
|
|
*
|
|
* @param pPort Port instance
|
|
* @param u8Pin Pin number
|
|
* @param u8PeValue Pin PE configuration value(1/0)
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_SetPinPullEnable(PORT_Type *pPort, uint8_t u8Pin, uint8_t u8PeValue)
|
|
{
|
|
if (u8PeValue)
|
|
{
|
|
pPort->PCR[u8Pin] |= (uint32_t)PORT_PCR_PE_MASK;
|
|
}
|
|
else
|
|
{
|
|
pPort->PCR[u8Pin] &= ~(uint32_t)PORT_PCR_PE_MASK;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Set pin pull mode
|
|
*
|
|
* @param pPort Port instance
|
|
* @param u8Pin Pin number
|
|
* @param u8PsValue Pin PS configuration value(1/0)
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_SetPinPullMode(PORT_Type *pPort, uint8_t u8Pin, uint8_t u8PsValue)
|
|
{
|
|
if (u8PsValue)
|
|
{
|
|
pPort->PCR[u8Pin] |= (uint32_t)PORT_PCR_PS_MASK;
|
|
}
|
|
else
|
|
{
|
|
pPort->PCR[u8Pin] &= ~(uint32_t)PORT_PCR_PS_MASK;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Set pin drive strength
|
|
*
|
|
* @param pPort Port instance
|
|
* @param u8Pin Pin number
|
|
* @note only hs PAD use this bit
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_SetPinDriveStrength(PORT_Type *pPort, uint8_t u8Pin)
|
|
{
|
|
pPort->PCR[u8Pin] |= (uint32_t)PORT_PCR_DSE0_MASK;
|
|
}
|
|
|
|
/**
|
|
* @brief Set pin passive filter enable
|
|
*
|
|
* @param pPort Port instance
|
|
* @param u8Pin Pin number
|
|
* @param u8PfeValue Pin PFE configuration value(1/0)
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_SetPinPassiveFilterEnable(PORT_Type *pPort, uint8_t u8Pin, uint8_t u8PfeValue)
|
|
{
|
|
if (u8PfeValue)
|
|
{
|
|
pPort->PCR[u8Pin] |= (uint32_t)PORT_PCR_PFE_MASK;
|
|
}
|
|
else
|
|
{
|
|
pPort->PCR[u8Pin] &= ~(uint32_t)PORT_PCR_PFE_MASK;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Configure port digital filter
|
|
*
|
|
* @param pPort Port instance
|
|
* @param u32RegValue Enable bit,0-31 bit indicate pin 0-31
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_ConfigDigitalFilter(PORT_Type *pPort, uint32_t u32RegValue)
|
|
{
|
|
pPort->DFER = u32RegValue;
|
|
}
|
|
|
|
/**
|
|
* @brief Set port digital filter enable
|
|
*
|
|
* @param pPort Port instance
|
|
* @param u8RegBit DFER register bit
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_SetDigitalFilterEnable(PORT_Type *pPort, uint8_t u8RegBit)
|
|
{
|
|
pPort->DFER |= (uint32_t)1 << u8RegBit;
|
|
}
|
|
|
|
/**
|
|
* @brief Set port digital filter clock source
|
|
*
|
|
* @param pPort Port instance
|
|
* @param eClkSrc Digital filter clock source
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_SetDigitalFilterClkSrc(PORT_Type *pPort)
|
|
{
|
|
pPort->DFCR |= 1U;
|
|
}
|
|
|
|
/**
|
|
* @brief Configure digital filter width
|
|
* @param pPort Port instance
|
|
* @param u32FilterWidth Digital filter length value,range:0-31
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_ConfigDigitalFilterWidth(PORT_Type *pPort, uint32_t u32FilterWidth)
|
|
{
|
|
pPort->DFWR = PORT_DFWR_FILT(u32FilterWidth);
|
|
}
|
|
|
|
/**
|
|
* @brief Clear pin interrupt mode
|
|
*
|
|
* @param pPort Port instance
|
|
* @param u8Pin Pin number
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_ClearPinInterruptMode(PORT_Type *pPort, uint8_t u8Pin)
|
|
{
|
|
pPort->PCR[u8Pin] &= ~(uint32_t)PORT_PCR_IRQC_MASK;
|
|
}
|
|
|
|
/**
|
|
* @brief Clear pin interrupt flag
|
|
*
|
|
* @param pPort Port instance
|
|
* @param u8Pin Pin number
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_ClearPinInterruptFlag(PORT_Type *pPort, uint8_t u8Pin)
|
|
{
|
|
pPort->PCR[u8Pin] |= (uint32_t)PORT_PCR_ISF_MASK;
|
|
}
|
|
|
|
/**
|
|
* @brief CLear port digital filter enable
|
|
*
|
|
* @param pPort Port instance
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_ClearDigitalFilterEnable(PORT_Type *pPort)
|
|
{
|
|
pPort->DFER = (uint32_t)0U;
|
|
}
|
|
|
|
/**
|
|
* @brief Clear port digital filter enable for specific pin
|
|
*
|
|
* @param pPort Port instance
|
|
* @param u8RegBit DFER register bit
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_ClearDigitalFilterPin(PORT_Type *pPort, uint8_t u8RegBit)
|
|
{
|
|
pPort->DFER &= (uint32_t)~((uint32_t)1 << u8RegBit);
|
|
}
|
|
|
|
/**
|
|
* @brief Clear port digital filter clock source
|
|
*
|
|
* @param pPort Port instance
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_ClearDigitalFilterClkSrc(PORT_Type *pPort)
|
|
{
|
|
pPort->DFCR &= ~(uint32_t)PORT_DFCR_CS_MASK;
|
|
}
|
|
|
|
/**
|
|
* @brief Clear port digital filter width
|
|
*
|
|
* @param pPort Port instance
|
|
*/
|
|
LOCAL_INLINE void PORT_HWA_ClearDigitalFilterWidth(PORT_Type *pPort)
|
|
{
|
|
pPort->DFWR &= ~(uint32_t)PORT_DFWR_FILT_MASK;
|
|
}
|
|
|
|
/** @}*/
|
|
|
|
#endif
|
|
|
|
#endif /* #ifndef _HWA_PORT_H_ */
|