HwA_Flagchip_FC7240/Inc/HwA_gpio.h

246 lines
5.0 KiB
C

/**
* @file HwA_gpio.h
* @author Flagchip
* @brief FC7xxx GPIO hardware access layer
* @version 0.1.0
* @date 2023-02-13
*
* @copyright Copyright (c) 2023 Flagchip Semiconductors Co., Ltd.
*
* @details
*/
/* ********************************************************************************
* Revision History:
*
* Version Date Initials CR# Descriptions
* --------- ---------- ------------ ---------- ---------------
* 0.1.0 2022-11-18 Flagchip071 N/A First version for FC7xxx
******************************************************************************** */
#ifndef _HWA_GPIO_H_
#define _HWA_GPIO_H_
#include "device_header.h"
/** @brief GPIO initialization level */
typedef enum
{
GPIO_LOW = 0U,
GPIO_HIGH = 1U
} GPIO_PinLevelType;
/**
* @brief Set port data output, port output can set 1 or 0
*
* @param pGpio Gpio instance
* @param u32Value Written value
*/
LOCAL_INLINE void GPIO_HWA_ConfigPortDataOutput(GPIO_Type *pGpio, uint32_t u32Value)
{
pGpio->PDOR = u32Value;
}
/**
* @brief Set pin data output, pin output can set 1 or 0
*
* @param pGpio Gpio instance
* @param u32Pin Pin mask
* @param ePinLevel Pin level
*/
LOCAL_INLINE void GPIO_HWA_ConfigPinDataOutput(GPIO_Type *pGpio, uint32_t u32Pin, GPIO_PinLevelType ePinLevel)
{
if (GPIO_HIGH == ePinLevel)
{
pGpio->PDOR |= GPIO_PDOR_PDO(u32Pin);
}
else
{
pGpio->PDOR &= ~GPIO_PDOR_PDO(u32Pin);
}
}
/**
* @brief Set port output to 1
*
* @param pGpio Gpio instance
* @param u32Value Written value
*/
LOCAL_INLINE void GPIO_HWA_SetPortOutput(GPIO_Type *pGpio, uint32_t u32Value)
{
pGpio->PSOR |= u32Value;
}
/**
* @brief Set port output to 0
*
* @param pGpio Gpio instance
* @param u32Value Written value
*/
LOCAL_INLINE void GPIO_HWA_ClearPortOutput(GPIO_Type *pGpio, uint32_t u32Value)
{
pGpio->PCOR |= u32Value;
}
/**
* @brief Toggle port output
*
* @param pGpio Gpio instance
* @param u32Value Written value
*/
LOCAL_INLINE void GPIO_HWA_TogglePort(GPIO_Type *pGpio, uint32_t u32Value)
{
pGpio->PTOR = u32Value;
}
/**
* @brief Set port direction
*
* @param pGpio Gpio instance
* @param u32Value Written value
*/
LOCAL_INLINE void GPIO_HWA_SetPortDirection(GPIO_Type *pGpio, uint32_t u32Value)
{
pGpio->PDDR = u32Value;
}
/**
* @brief Set port input disable
*
* @param pGpio Gpio instance
* @param u32Value Written value
*/
LOCAL_INLINE void GPIO_HWA_SetPortInputDisable(GPIO_Type *pGpio, uint32_t u32Value)
{
pGpio->PIDR = u32Value;
}
/**
* @brief Read port data output
*
* @param pGpio Gpio instance
* @return PDOR register value
*/
LOCAL_INLINE uint32_t GPIO_HWA_ReadPortDataOutput(GPIO_Type *pGpio)
{
return pGpio->PDOR;
}
/**
* @brief Read port data input, this register indicate data on pad.
*
* @param pGpio Gpio instance
* @return PDIR register value
*/
LOCAL_INLINE uint32_t GPIO_HWA_ReadPortDataInput(GPIO_Type *pGpio)
{
return pGpio->PDIR;
}
/**
* @brief Set pin data output, pin output can set 1 or 0
*
* @param pGpio Gpio instance
* @param u8Pin Pin number
*/
LOCAL_INLINE void GPIO_HWA_SetPinDataOutput(GPIO_Type *pGpio, uint8_t u8Pin)
{
pGpio->PDOR |= (uint32_t)1 << u8Pin;
}
/**
* @brief Set pin output to 1
*
* @param pGpio Gpio instance
* @param u8Pin Pin number
*/
LOCAL_INLINE void GPIO_HWA_SetPinOutput(GPIO_Type *pGpio, uint8_t u8Pin)
{
pGpio->PSOR |= (uint32_t)1 << u8Pin;
}
/**
* @brief Set pin output to 0
*
* @param pGpio Gpio instance
* @param u8Pin Pin number
*/
LOCAL_INLINE void GPIO_HWA_ClearPinOutput(GPIO_Type *pGpio, uint8_t u8Pin)
{
pGpio->PCOR |= (uint32_t)1 << u8Pin;
}
/**
* @brief Toggle pin
*
* @param pGpio Gpio instance
* @param u8Pin Pin number
*/
LOCAL_INLINE void GPIO_HWA_TogglePin(GPIO_Type *pGpio, uint8_t u8Pin)
{
pGpio->PTOR |= (uint32_t)1 << u8Pin;
}
/**
* @brief Set pin direction
*
* @param pGpio Gpio instance
* @param u8Pin Pin number
*/
LOCAL_INLINE void GPIO_HWA_SetPinDirection(GPIO_Type *pGpio, uint8_t u8Pin)
{
pGpio->PDDR |= (uint32_t)1 << u8Pin;
}
/**
* @brief Set pin input disable
*
* @param pGpio Gpio instance
* @param u8Pin Pin number
*/
LOCAL_INLINE void GPIO_HWA_SetPinInputDisable(GPIO_Type *pGpio, uint8_t u8Pin)
{
pGpio->PIDR |= (uint32_t)1 << u8Pin;
}
/**
* @brief Clear pin data output
*
* @param pGpio Gpio instance
* @param u8Pin Pin number
*/
LOCAL_INLINE void GPIO_HWA_ClearPinDataOutput(GPIO_Type *pGpio, uint8_t u8Pin)
{
pGpio->PDOR &= ~((uint32_t)1 << u8Pin);
}
/**
* @brief Clear pin direction
*
* @param pGpio Gpio instance
* @param u8Pin Pin number
*/
LOCAL_INLINE void GPIO_HWA_ClearPinDirection(GPIO_Type *pGpio, uint8_t u8Pin)
{
pGpio->PDDR &= ~((uint32_t)1 << u8Pin);
}
/**
* @brief Clear pin input disable
*
* @param pGpio Gpio instance
* @param u8Pin Pin number
*/
LOCAL_INLINE void GPIO_HWA_ClearPinInputDisable(GPIO_Type *pGpio, uint8_t u8Pin)
{
pGpio->PIDR &= ~((uint32_t)1 << u8Pin);
}
#endif /* #ifndef _HWA_GPIO_H_ */