📄 drvgpio.c
字号:
/* */
/* Parameter: */
/* port - [in] */
/* E_DRVGPIO_PORT, specify GPIO port. It could be E_GPA, E_GPB, E_GPC, E_GPD and E_GPE. */
/* i32MaskData - [in] */
/* Specify pins of the GPIO port. It could be 0~0xFFFF. */
/* Returns: */
/* E_SUCCESS Operation successful */
/* E_DRVGPIO_ARGUMENT Incorrect argument */
/* Description: */
/* This function is used to protect the write data function of the corresponding GPIO pins. */
/* When set the bits are masked, write data to the protect bits are ignored. */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvGPIO_SetPortMask(E_DRVGPIO_PORT port, int32_t i32MaskData)
{
outpw((uint32_t)&GPIOA->DMASK + (port*PORT_OFFSET), DrvGPIO_GetPortMask(port) | i32MaskData);
return E_SUCCESS;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvGPIO_GetPortMask */
/* */
/* Parameter: */
/* port - [in] */
/* E_DRVGPIO_PORT, specify GPIO port. It could be E_GPA, E_GPB, E_GPC, E_GPD and E_GPE. */
/* Returns: */
/* The portt value of the specified register 0 ~ 0xFFFF */
/* Description: */
/* Get the port value from the specified Data Output Write Mask Register. */
/* If the corresponding bit of the return port value is 1, it's meaning the bits are */
/* protected. And write data to the bits are ignored. */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvGPIO_GetPortMask(E_DRVGPIO_PORT port)
{
return inpw((uint32_t)&GPIOA->DMASK + (port* PORT_OFFSET));
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvGPIO_ClrPortMask */
/* */
/* Parameter: */
/* port - [in] */
/* E_DRVGPIO_PORT, specify GPIO port. It could be E_GPA, E_GPB, E_GPC, E_GPD and E_GPE. */
/* i32MaskData - [in] */
/* Specify pins of the GPIO port. It could be 0~0xFFFF. */
/* Returns: */
/* E_SUCCESS, operation successful */
/* Description: */
/* This function is used to remove the write protect function of the the corresponding GPIO */
/* pins. After remove those bits mask, write data to the corresponding bits are workable. */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvGPIO_ClrPortMask(E_DRVGPIO_PORT port, int32_t i32MaskData)
{
outpw((uint32_t)&GPIOA->DMASK + (port*PORT_OFFSET), DrvGPIO_GetPortMask(port) & ~(i32MaskData));
return E_SUCCESS;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvGPIO_EnableDigitalInputBit */
/* */
/* Parameter: */
/* port - [in] */
/* E_DRVGPIO_PORT, specify GPIO port. It could be E_GPA, E_GPB, E_GPC, E_GPD and E_GPE. */
/* i32Bit - [in] */
/* Specify pin of the GPIO port. It could be 0~15. */
/* Returns: */
/* E_SUCCESS Operation successful */
/* Description: */
/* Enable IO digital input path of the specified GPIO input pin. */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvGPIO_EnableDigitalInputBit(E_DRVGPIO_PORT port, int32_t i32Bit)
{
volatile uint32_t u32Reg = (uint32_t)&GPIOA->OFFD + (port*PORT_OFFSET);
outpw(u32Reg, inpw(u32Reg) & ~(1 << (i32Bit+16)));
return E_SUCCESS;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvGPIO_DisableDigitalInputBit */
/* */
/* Parameter: */
/* port - [in] */
/* E_DRVGPIO_PORT, specify GPIO port. It could be E_GPA, E_GPB, E_GPC, E_GPD and E_GPE. */
/* i32Bit - [in] */
/* Specify pin of the GPIO port. It could be 0~15. */
/* Returns: */
/* E_SUCCESS Operation successful */
/* Description: */
/* Disable IO digital input path of the specified GPIO input pin. */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvGPIO_DisableDigitalInputBit(E_DRVGPIO_PORT port, int32_t i32Bit)
{
volatile uint32_t u32Reg = (uint32_t)&GPIOA->OFFD + (port*PORT_OFFSET);
outpw(u32Reg, inpw(u32Reg) | (1 << (i32Bit+16)));
return E_SUCCESS;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvGPIO_EnableDebounce */
/* */
/* Parameter: */
/* port - [in] */
/* E_DRVGPIO_PORT, specify GPIO port. It could be E_GPA, E_GPB, E_GPC, E_GPD and E_GPE. */
/* i32Bit - [in] */
/* Specify pin of the GPIO port. It could be 0~15. */
/* Returns: */
/* E_SUCCESS Operation successful */
/* Description: */
/* Enable the debounce function of the specified GPIO input pin. */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvGPIO_EnableDebounce(E_DRVGPIO_PORT port, int32_t i32Bit)
{
volatile uint32_t u32Reg;
u32Reg = (uint32_t)&GPIOA->DBEN + (port*PORT_OFFSET);
outpw(u32Reg, inpw(u32Reg) | (1<<i32Bit));
GPIO_DBNCECON->DBNCECON.ICLK_ON = 1;
return E_SUCCESS;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvGPIO_DisableDebounce */
/* */
/* Parameter: */
/* port - [in] */
/* E_DRVGPIO_PORT, specify GPIO port. It could be E_GPA, E_GPB, E_GPC, E_GPD and E_GPE. */
/* i32Bit - [in] */
/* Specify pin of the GPIO port. It could be 0~15. */
/* Returns: */
/* E_SUCCESS Operation successful */
/* Description: */
/* Disable the debounce function of the specified GPIO input pin. */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvGPIO_DisableDebounce(E_DRVGPIO_PORT port, int32_t i32Bit)
{
volatile uint32_t u32Reg;
u32Reg = (uint32_t)&GPIOA->DBEN + (port*PORT_OFFSET);
outpw(u32Reg, inpw(u32Reg) & ~(1<<i32Bit));
GPIO_DBNCECON->DBNCECON.ICLK_ON = 0;
return E_SUCCESS;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvGPIO_SetDebounceTime */
/* */
/* Parameter: */
/* u32CycleSelection - [in] */
/* The number of sampling cycle selection, the range of value is from 0 ~ 15. */
/* The target debounce time is (2^(u32CycleSelection))*(ClockSource) second */
/* ClockSource - [in] */
/* E_DRVGPIO_DBCLKSRC, it could be DBCLKSRC_HCLK or DBCLKSRC_10K */
/* Returns: */
/* E_SUCCESS Operation successful */
/* E_DRVGPIO_ARGUMENT Incorrect argument */
/* Description: */
/* Set the interrupt debounce sampling time based on the debounce counter clock source. */
/* If the debounce clock source is from internal 10 KHz and sampling cycle selection is 4. */
/* The target debounce time is (2^4)*(1/(10*1000)) s = 16*0.0001 s = 1600 us, and system */
/* will sampling interrupt input once per 1600 us. */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvGPIO_SetDebounceTime(uint32_t u32CycleSelection, E_DRVGPIO_DBCLKSRC ClockSource)
{
/* Maximum debounce time is 2^(15)*(clk src) */
if (u32CycleSelection > 15)
{
return E_DRVGPIO_ARGUMENT;
}
GPIO_DBNCECON->DBNCECON.DBCLKSEL = u32CycleSelection ;
GPIO_DBNCECON->DBNCECON.DBCLKSRC = ClockSource ;
return E_SUCCESS;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvGPIO_GetDebounceSampleCycle */
/* */
/* Parameter: */
/* None */
/* Returns: */
/* Number of the sampling cycle selection 0 ~ 15 */
/* Description: */
/* This function is used to get the number of debounce sampling cycle selection. */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvGPIO_GetDebounceSampleCycle(void)
{
return GPIO_DBNCECON->DBNCECON.DBCLKSEL;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvGPIO_EnableInt */
/* */
/* Parameter: */
/* port - [in] */
/* E_DRVGPIO_PORT, specify GPIO port. It could be E_GPA, E_GPB, E_GPC, E_GPD and E_GPE. */
/* i32Bit - [in] */
/* Specify pin of the GPIO port. It could be 0~15. */
/* But the GPB.14 and 15 are only used for external interrupt 0/1. */
/* TriggerType - [in] */
/* E_DRVGPIO_INT_TYPE, specify the interrupt trigger type. */
/* It could be E_IO_RISING, E_IO_FALLING or E_IO_BOTH_EDGE and */
/* it's meaning the interrupt function enable by rising egde/high level, */
/* falling edge/low level or both riging edge and falling egde. */
/* If the interrupt mode is E_MODE_LEVEL and interrupt type is */
/* E_BOTH_EDGE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -