api_rt_gpio.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "api_rt_gpio.h"
  2. #include "gd32f30x.h"
  3. Gpio_Handle const Gpios[GPIO_PIN_COUNT] = {
  4. [0] = {.GpioBase = GPIOC, .Index = 0},
  5. [1] = {.GpioBase = GPIOC, .Index = 1},
  6. [2] = {.GpioBase = GPIOC, .Index = 7},
  7. [3] = {.GpioBase = GPIOC, .Index = 8},
  8. [4] = {.GpioBase = GPIOC, .Index = 15},
  9. [5] = {.GpioBase = GPIOC, .Index = 13},
  10. [6] = {.GpioBase = GPIOC, .Index = 14},
  11. [7] = {.GpioBase = GPIOC, .Index = 10},
  12. [8] = {.GpioBase = GPIOC, .Index = 11},
  13. [9] = {.GpioBase = GPIOC, .Index = 2},
  14. [10] = {.GpioBase = GPIOB, .Index = 9},
  15. [11] = {.GpioBase = GPIOB, .Index = 8},
  16. [12] = {.GpioBase = GPIOA, .Index = 12},
  17. [13] = {.GpioBase = GPIOC, .Index = 12},
  18. [14] = {.GpioBase = GPIOB, .Index = 2},
  19. };
  20. void iRtGpio_Init()
  21. {
  22. }
  23. void iGpio_SetMode(uint16_t pin, ApiGpio_PinMode mode)
  24. {
  25. const Gpio_Handle *const gpio = &Gpios[pin];
  26. switch (mode)
  27. {
  28. case ApiGpio_Input:
  29. gpio_init(gpio->GpioBase, GPIO_MODE_IPD, GPIO_OSPEED_50MHZ, BIT(gpio->Index));
  30. break;
  31. case ApiGpio_Output:
  32. gpio_init(gpio->GpioBase, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, BIT(gpio->Index));
  33. break;
  34. case ApiGpio_AlternateFunction:
  35. gpio_init(gpio->GpioBase, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, BIT(gpio->Index));
  36. break;
  37. default:
  38. break;
  39. }
  40. }
  41. iGpio_Level iGpio_Read(uint16_t pin)
  42. {
  43. const Gpio_Handle *const gpio = &Gpios[pin];
  44. iGpio_Level level = iGpio_LowLevel;
  45. if ((uint32_t)RESET != (GPIO_ISTAT(gpio->GpioBase)&((uint32_t)((uint32_t)0x01U << gpio->Index))))
  46. {
  47. level = iGpio_HighLevel;
  48. }
  49. return level;
  50. }
  51. void iGpio_Write(uint16_t pin, iGpio_Level level)
  52. {
  53. const Gpio_Handle *const gpio = &Gpios[pin];
  54. if (level == iGpio_HighLevel)
  55. {
  56. GPIO_OCTL(gpio->GpioBase) |= ((uint32_t)((uint32_t)0x01U << gpio->Index));
  57. }
  58. else
  59. {
  60. GPIO_OCTL(gpio->GpioBase) &= ~((uint32_t)((uint32_t)0x01U << gpio->Index));
  61. }
  62. }