246 lines
5.0 KiB
C
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_ */
|