You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
272 lines
5.9 KiB
272 lines
5.9 KiB
|
|
|
|
|
|
#ifndef DRV_GPIO_H
|
|
#define DRV_GPIO_H
|
|
#include "cmsdk_cm0.h"
|
|
#include "clkctrl_define.h"
|
|
|
|
#include "stdbool.h"
|
|
|
|
|
|
/***************************************************
|
|
* *
|
|
* ***************** GPIO ***********************
|
|
* *
|
|
****************************************************/
|
|
|
|
|
|
#define GPIO0_BASE (0x40010000)
|
|
#define GPIO1_BASE (0x40011000)
|
|
|
|
|
|
#define GPIO_MODE_IN 0
|
|
#define GPIO_MODE_OUT 1
|
|
#define GPIO_MODE_AF 2
|
|
|
|
#define GPIO_GP56_MODE_REG7_POS (29)
|
|
#define GPIO_GP56_MODE_REG7_MASK (1<<GPIO_GP56_MODE_REG7_POS)
|
|
#define GPIO_GP56_MODE_REG7_OD (0<<GPIO_GP56_MODE_REG7_POS)
|
|
#define GPIO_GP56_MODE_REG7_PP (1<<GPIO_GP56_MODE_REG7_POS)
|
|
#define GPIO_GP56_MODE_OD (0<<GPIO_GP56_MODE_REG7_POS)
|
|
#define GPIO_GP56_MODE_PP (1<<GPIO_GP56_MODE_REG7_POS) // open drain
|
|
|
|
#define GPIO_AF_P0_FODOV (0x01ul << 14)
|
|
#define GPIO_AF_P0_BUCKCP (0x01ul << 12)
|
|
#define GPIO_AF_P0_VINUV (0x01ul << 11)
|
|
#define GPIO_AF_P0_VINOV (0x01ul << 10)
|
|
#define GPIO_AF_P0_VREGOC (0x01ul << 9)
|
|
#define GPIO_AF_P0_OT (0x01ul << 8)
|
|
#define GPIO_AF_P1_MISO (0x01ul << 15)
|
|
#define GPIO_AF_P1_FODB (0x01ul << 7)
|
|
#define GPIO_AF_P1_FODA (0x01ul << 6)
|
|
#define GPIO_AF_P1_CLKDET (0x01ul << 5)
|
|
#define GPIO_AF_P1_UARTRX (0x01ul << 4)
|
|
#define GPIO_AF_P1_ASKBIOUT (0x01ul << 3)
|
|
#define GPIO_AF_P1_ASKBVOUT (0x01ul << 2)
|
|
#define GPIO_AF_P1_ASKAIOUT (0x01ul << 1)
|
|
#define GPIO_AF_P1_ASKAVOUT (0x01ul << 0)
|
|
|
|
|
|
typedef
|
|
enum drv_gpio_group_e
|
|
{
|
|
GPIO_GRP0 = 0, // group gpio0
|
|
GPIO_GRP1, // group gpio1
|
|
GPIO_GRP_MAX
|
|
} drv_gpio_group_e;
|
|
|
|
|
|
typedef
|
|
enum drv_gpio_pin_e
|
|
{
|
|
GPIO_PIN0 = 0,
|
|
GPIO_PIN1,
|
|
GPIO_PIN2,
|
|
GPIO_PIN3,
|
|
GPIO_PIN4,
|
|
GPIO_PIN5,
|
|
GPIO_PIN6,
|
|
GPIO_PIN7,
|
|
GPIO_PIN8,
|
|
GPIO_PIN9,
|
|
GPIO_PIN10,
|
|
GPIO_PIN11,
|
|
GPIO_PIN12,
|
|
GPIO_PIN13,
|
|
GPIO_PIN14,
|
|
GPIO_PIN15,
|
|
GPIO_PIN_MAX,
|
|
} drv_gpio_pin_e;
|
|
|
|
|
|
/*
|
|
* @brief get specificated gp pin input value
|
|
* @param pin number to be get
|
|
* @retval pin value
|
|
*/
|
|
__forceinline uint8_t drv_gpio_read(drv_gpio_pin_e pin)
|
|
{
|
|
return (uint8_t)((CMSDK_GPIO0->DATA >> pin) & 0x01ul);
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief enable gpio pins output.
|
|
* @param group: GPIO0 or GPIO1
|
|
* @param pin: pin num
|
|
* @retval null
|
|
*/
|
|
__forceinline void drv_gpio_enable_out(drv_gpio_pin_e pin)
|
|
{
|
|
CMSDK_GPIO0->OUTENABLESET |= (1 << pin);
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief disable gpio pin out enable
|
|
* @param group: GPIO0 or GPIO1
|
|
* @param pin: pin num
|
|
* @retval null
|
|
*/
|
|
__forceinline void drv_gpio_disable_out(drv_gpio_pin_e pin)
|
|
{
|
|
CMSDK_GPIO0->OUTENABLECLR = (1 << pin);
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
* @brief set gp pin value
|
|
* @param group: GPIO group
|
|
* @param pin: pin num
|
|
* @param value: 0 for low, 1 for high
|
|
* @retval null
|
|
*/
|
|
__forceinline void drv_gpio_write(drv_gpio_pin_e pin, uint8_t value)
|
|
{
|
|
if(value)
|
|
{
|
|
CMSDK_GPIO0->DATAOUT |= (1 << pin);
|
|
}
|
|
else
|
|
{
|
|
CMSDK_GPIO0->DATAOUT &= ~(1 << pin);
|
|
}
|
|
}
|
|
|
|
|
|
///*
|
|
//* @brief set gp pin func
|
|
//* @param
|
|
//* @param
|
|
//* @param value:
|
|
//* @retval null
|
|
//*/
|
|
//void drv_gpio_pin_func(uint8_t pin, uint8_t func)
|
|
//{
|
|
// REG_CLKCTRL_PIN_MUL_SET->word |= (func << (pin << 1));
|
|
//}
|
|
|
|
|
|
/**
|
|
* @brief enable gpio pin interruptable
|
|
* @param group: GPIO0 or GPIO1
|
|
* @param pin: pin num
|
|
* @retval null
|
|
*/
|
|
__forceinline void drv_gpio_enable_int(drv_gpio_pin_e pin)
|
|
{
|
|
CMSDK_GPIO0->INTENSET = (1 << pin);
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief disable gpio pin interruptable
|
|
* @param group: GPIO0 or GPIO1
|
|
* @param pin: pin num
|
|
* @retval null
|
|
*/
|
|
__forceinline void drv_gpio_disable_int(drv_gpio_pin_e pin)
|
|
{
|
|
CMSDK_GPIO0->INTENCLR = (1 << pin);
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief set gpio pin rising edge trigger interrupt
|
|
* @param group: GPIO0 or GPIO1
|
|
* @param pin: pin num
|
|
* @retval null
|
|
*/
|
|
__forceinline void drv_gpio_set_risingedge_int(drv_gpio_pin_e pin)
|
|
{
|
|
CMSDK_GPIO0->INTTYPESET |= (1 << pin);
|
|
CMSDK_GPIO0->INTPOLSET |= (1 << pin);
|
|
}
|
|
|
|
/**
|
|
* @brief set gpio pin falling edge trigger interrupt
|
|
* @param group: GPIO0 or GPIO1
|
|
* @param pin: pin num
|
|
* @retval null
|
|
*/
|
|
__forceinline void drv_gpio_set_fallingedge_int(drv_gpio_pin_e pin)
|
|
{
|
|
CMSDK_GPIO0->INTTYPESET |= (1 << pin);
|
|
CMSDK_GPIO0->INTPOLCLR |= (1 << pin);
|
|
}
|
|
|
|
/**
|
|
* @brief set gpio pin high level trigger interrupt
|
|
* @param group: GPIO0 or GPIO1
|
|
* @param pin: pin num
|
|
* @retval null
|
|
*/
|
|
__forceinline void drv_gpio_set_highlevel_int(drv_gpio_pin_e pin)
|
|
{
|
|
CMSDK_GPIO0->INTTYPECLR |= (1 << pin);
|
|
CMSDK_GPIO0->INTPOLSET |= (1 << pin);
|
|
}
|
|
|
|
/**
|
|
* @brief set gpio pin low level trigger interrupt
|
|
* @param group: GPIO0 or GPIO1
|
|
* @param pin: pin num
|
|
* @retval null
|
|
*/
|
|
__forceinline void drv_gpio_set_lowlevel_int(drv_gpio_pin_e pin)
|
|
{
|
|
CMSDK_GPIO0->INTTYPECLR |= (1 << pin);
|
|
CMSDK_GPIO0->INTPOLCLR |= (1 << pin);
|
|
}
|
|
|
|
/**
|
|
* @brief clear gpio pin interrupt flag
|
|
* @param group: GPIO0 or GPIO1
|
|
* @param pin: pin num
|
|
* @retval interrupt status
|
|
*/
|
|
__forceinline uint32_t drv_gpio_clear_intflag(drv_gpio_pin_e pin)
|
|
{
|
|
CMSDK_GPIO0->INTCLEAR |= (1 << pin);
|
|
return CMSDK_GPIO0->INTSTATUS;
|
|
}
|
|
|
|
__forceinline void drv_gpio_clear_group_intflag(drv_gpio_group_e group)
|
|
{
|
|
CMSDK_GPIO0->INTCLEAR |= CMSDK_GPIO0->INTSTATUS;
|
|
}
|
|
|
|
__forceinline uint32_t drv_gpio_get_intflag(void)
|
|
{
|
|
return CMSDK_GPIO0->INTSTATUS;
|
|
}
|
|
|
|
/**
|
|
* @brief enable gpio pin alternate function
|
|
* @param group: GPIO0 or GPIO1
|
|
* @param pin: pin num
|
|
* @retval null
|
|
*/
|
|
__forceinline void drv_gpio_enable_altfunc(drv_gpio_pin_e pin)
|
|
{
|
|
CMSDK_GPIO0->ALTFUNCSET |= (1 << pin);
|
|
}
|
|
|
|
/**
|
|
* @brief disable gpio pin alternate function
|
|
* @param group: GPIO0 or GPIO1
|
|
* @param pin: pin num
|
|
* @retval null
|
|
*/
|
|
__forceinline void drv_gpio_disable_altfunc(drv_gpio_pin_e pin)
|
|
{
|
|
CMSDK_GPIO0->ALTFUNCCLR |= (1 << pin);
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|