drv_gpio.c 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * Copyright (c) 2021-2022, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2022-06-03 supperthomas first version
  9. *
  10. */
  11. #include <rtthread.h>
  12. #include <rtdevice.h>
  13. #include "driver/gpio.h"
  14. #ifdef RT_USING_PIN
  15. static void mcu_pin_write(rt_device_t dev, rt_base_t pin, rt_base_t value)
  16. {
  17. gpio_set_level(pin, value);
  18. /*TODO:set gpio out put mode */
  19. }
  20. static int mcu_pin_read(rt_device_t dev, rt_base_t pin)
  21. {
  22. int value;
  23. value = gpio_get_level(pin);
  24. return value;
  25. }
  26. static gpio_config_t init_io(gpio_num_t num)
  27. {
  28. gpio_config_t io_conf;
  29. io_conf.intr_type = GPIO_INTR_DISABLE;
  30. io_conf.mode = GPIO_MODE_OUTPUT;
  31. io_conf.pin_bit_mask = (1ULL << num);
  32. io_conf.pull_down_en = 0;
  33. io_conf.pull_up_en = 0;
  34. return io_conf;
  35. }
  36. static void mcu_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode)
  37. {
  38. gpio_config_t io_conf;
  39. io_conf.intr_type = GPIO_INTR_DISABLE;
  40. io_conf.mode = GPIO_MODE_OUTPUT;
  41. io_conf.pin_bit_mask = (1ULL << pin);
  42. io_conf.pull_down_en = 0;
  43. io_conf.pull_up_en = 0;
  44. gpio_config(&io_conf);
  45. if (mode == PIN_MODE_OUTPUT)
  46. {
  47. gpio_set_direction(pin, GPIO_MODE_OUTPUT);
  48. }
  49. /*TODO:set gpio out put mode */
  50. }
  51. static rt_err_t mcu_pin_attach_irq(struct rt_device *device, rt_int32_t pin,
  52. rt_uint32_t irq_mode, void (*hdr)(void *args), void *args)
  53. {
  54. /*TODO: start irq handle */
  55. return RT_EOK;
  56. }
  57. static rt_err_t mcu_pin_dettach_irq(struct rt_device *device, rt_int32_t pin)
  58. {
  59. /*TODO:disable gpio irq handle */
  60. return RT_EOK;
  61. }
  62. static rt_err_t mcu_pin_irq_enable(struct rt_device *device, rt_base_t pin,
  63. rt_uint32_t enabled)
  64. {
  65. /*TODO:start irq handle */
  66. return RT_EOK;
  67. }
  68. const static struct rt_pin_ops _mcu_pin_ops =
  69. {
  70. mcu_pin_mode,
  71. mcu_pin_write,
  72. mcu_pin_read,
  73. mcu_pin_attach_irq,
  74. mcu_pin_dettach_irq,
  75. mcu_pin_irq_enable,
  76. ///NULL,
  77. };
  78. int rt_hw_pin_init(void)
  79. {
  80. /*TODO: INIT THE GPIO CLOCK AND OTHER */
  81. return rt_device_pin_register("pin", &_mcu_pin_ops, RT_NULL);
  82. }
  83. INIT_BOARD_EXPORT(rt_hw_pin_init);
  84. #endif /* RT_USING_PIN */