123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #include "yc11xx_gpio.h"
- #include "yc_drv_common.h"
- void GPIO_SetOut(GPIO_NUM gpio, GPIO_OutputTypeDef GPIO_Output)
- {
- hw_delay();
- if (gpio == GPIO_MAX_NUM)
- return;
- switch (GPIO_Output)
- {
- case OUT_LOW:
- HWRITE(CORE_GPIO_CONF + (gpio & GPIO_NUM_MASK),GPCFG_OUTPUT_LOW);
- break;
- case OUT_HIGH:
- HWRITE(CORE_GPIO_CONF + (gpio & GPIO_NUM_MASK),GPCFG_OUTPUT_HIGH);
- break;
- default:
- break;
- }
- hw_delay();
- }
- void GPIO_SetInput(GPIO_NUM gpio,GPIO_InputTypeDef GPIO_InputMode)
- {
- hw_delay();
- if (gpio == GPIO_MAX_NUM)
- return;
- switch(GPIO_InputMode)
- {
- case GPIO_Mode_IN_FLOATING:
- HWRITE(CORE_GPIO_CONF + (gpio & GPIO_NUM_MASK),GPCFG_INPUT);
- break;
- case GPIO_Mode_IPU:
- HWRITE(CORE_GPIO_CONF + (gpio & GPIO_NUM_MASK),GPCFG_PULLUP);
- break;
- case GPIO_Mode_IPD:
- HWRITE(CORE_GPIO_CONF + (gpio & GPIO_NUM_MASK),GPCFG_PULLDOWN);
- break;
- case GPIO_Mode_AIN:
- HWRITE(CORE_GPIO_CONF + (gpio & GPIO_NUM_MASK),GPCFG_NO_IE);
- break;
- default: break;
- }
- hw_delay();
- }
- void GPIO_ClearWakeup(GPIO_NUM gpio)
- {
- uint8_t row;
- uint8_t col;
- if (gpio == GPIO_MAX_NUM)
- return;
- row = (gpio>>3) & 0x03;
- col = (gpio & 0x07);
- HWRITE(mem_gpio_wakeup_low+row,HREAD(mem_gpio_wakeup_low+row)& (~(1<<col)));
- HWRITE(mem_gpio_wakeup_high+row,HREAD(mem_gpio_wakeup_high+row)& (~(1<<col)));
- }
- void GPIO_SetGpioMultFunction(GPIO_NUM gpio, uint8_t Func)
- {
- HWRITE(CORE_GPIO_CONF + (gpio & GPIO_NUM_MASK), Func);
- }
- BOOL gpioGetBit(uint8_t Num, uint32_t regBase)
- {
- uint8_t queue = 0;
- uint8_t group = 0;
- uint8_t st = 0;
-
- queue = (Num & 7);
- group = Num >> 3 & 3;
- st = HREAD(regBase+group);
- return (st & (1 << queue));
- }
- BOOL GPIO_GetInputStatus(GPIO_NUM gpio)
- {
- if (gpio == GPIO_MAX_NUM)
- {
- error_handle();
- }
- return gpioGetBit(gpio&0x1f,CORE_GPIO_IN);
- }
- void GPIO_SetWakeup(GPIO_NUM gpio,GPIO_AwakenTypeDef AWAKEN)
- {
- uint8_t row;
- uint8_t col;
- if (gpio == GPIO_MAX_NUM)
- return;
-
- row = (gpio>>3) & 0x03;
- col = (gpio & 0x07);
- switch(AWAKEN)
- {
- case LOW_AWAKEN:
- HWRITE(GPIO_WAKEUP_LOW_REG+row,HREAD(GPIO_WAKEUP_LOW_REG+row) | (1<<col));
- HWRITE(GPIO_WAKEUP_HIGH_REG+row,HREAD(GPIO_WAKEUP_HIGH_REG+row) & (~(1<<col)));
- break;
- case HIGH_AWAKEN:
- HWRITE(GPIO_WAKEUP_HIGH_REG+row,HREAD(GPIO_WAKEUP_HIGH_REG+row) | (1<<col));
- HWRITE(GPIO_WAKEUP_LOW_REG+row,HREAD(GPIO_WAKEUP_LOW_REG+row) & (~(1<<col)));
- break;
- }
- }
- void GPIO_SetWakeupByCurrentState(GPIO_NUM gpio)
- {
- BOOL St = GPIO_GetInputStatus(gpio);
- if (St) //high
- {
- GPIO_SetWakeup(gpio,LOW_AWAKEN);
- }
- else //low
- {
- GPIO_SetWakeup(gpio,HIGH_AWAKEN);
- }
- }
|