12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #include "api_rt_gpio.h"
- #include "gd32f30x.h"
- Gpio_Handle const Gpios[GPIO_PIN_COUNT] = {
- [0] = {.GpioBase = GPIOC, .Index = 0},
- [1] = {.GpioBase = GPIOC, .Index = 1},
- [2] = {.GpioBase = GPIOC, .Index = 7},
- [3] = {.GpioBase = GPIOC, .Index = 8},
- [4] = {.GpioBase = GPIOC, .Index = 15},
- [5] = {.GpioBase = GPIOC, .Index = 13},
- [6] = {.GpioBase = GPIOC, .Index = 14},
- [7] = {.GpioBase = GPIOC, .Index = 10},
- [8] = {.GpioBase = GPIOC, .Index = 11},
- [9] = {.GpioBase = GPIOC, .Index = 2},
- [10] = {.GpioBase = GPIOB, .Index = 9},
- [11] = {.GpioBase = GPIOB, .Index = 8},
- [12] = {.GpioBase = GPIOA, .Index = 12},
- [13] = {.GpioBase = GPIOC, .Index = 12},
- [14] = {.GpioBase = GPIOB, .Index = 2},
- };
- void iRtGpio_Init()
- {
- }
- void iGpio_SetMode(uint16_t pin, ApiGpio_PinMode mode)
- {
- const Gpio_Handle *const gpio = &Gpios[pin];
-
- switch (mode)
- {
- case ApiGpio_Input:
- gpio_init(gpio->GpioBase, GPIO_MODE_IPD, GPIO_OSPEED_50MHZ, BIT(gpio->Index));
- break;
- case ApiGpio_Output:
- gpio_init(gpio->GpioBase, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, BIT(gpio->Index));
- break;
- case ApiGpio_AlternateFunction:
- gpio_init(gpio->GpioBase, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, BIT(gpio->Index));
- break;
- default:
- break;
- }
- }
- iGpio_Level iGpio_Read(uint16_t pin)
- {
- const Gpio_Handle *const gpio = &Gpios[pin];
- iGpio_Level level = iGpio_LowLevel;
- if ((uint32_t)RESET != (GPIO_ISTAT(gpio->GpioBase)&((uint32_t)((uint32_t)0x01U << gpio->Index))))
- {
- level = iGpio_HighLevel;
- }
- return level;
- }
- void iGpio_Write(uint16_t pin, iGpio_Level level)
- {
- const Gpio_Handle *const gpio = &Gpios[pin];
- if (level == iGpio_HighLevel)
- {
- GPIO_OCTL(gpio->GpioBase) |= ((uint32_t)((uint32_t)0x01U << gpio->Index));
- }
- else
- {
- GPIO_OCTL(gpio->GpioBase) &= ~((uint32_t)((uint32_t)0x01U << gpio->Index));
- }
- }
|