drv_gpio.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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 "drv_gpio.h"
  12. #include <stdio.h>
  13. #ifdef RT_USING_PIN
  14. #define DBG_LEVEL DBG_LOG
  15. #define LOG_TAG "drv.gpio"
  16. #include <rtdbg.h>
  17. static void mcu_pin_write(rt_device_t dev, rt_base_t pin, rt_base_t value)
  18. {
  19. gpio_set_level(pin, value);
  20. /*TODO:set gpio out put mode */
  21. }
  22. static int mcu_pin_read(rt_device_t dev, rt_base_t pin)
  23. {
  24. int value;
  25. value = gpio_get_level(pin);
  26. return value;
  27. }
  28. static gpio_config_t init_io(gpio_num_t num)
  29. {
  30. gpio_config_t io_conf;
  31. io_conf.intr_type = GPIO_INTR_DISABLE;
  32. io_conf.mode = GPIO_MODE_OUTPUT;
  33. io_conf.pin_bit_mask = (1ULL << num);
  34. io_conf.pull_down_en = 0;
  35. io_conf.pull_up_en = 0;
  36. return io_conf;
  37. }
  38. static void mcu_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode)
  39. {
  40. gpio_config_t io_conf;
  41. io_conf.intr_type = GPIO_INTR_DISABLE;
  42. io_conf.mode = GPIO_MODE_OUTPUT;
  43. io_conf.pin_bit_mask = (1ULL << pin);
  44. io_conf.pull_down_en = 0;
  45. io_conf.pull_up_en = 0;
  46. gpio_config(&io_conf);
  47. if (mode == PIN_MODE_OUTPUT)
  48. {
  49. gpio_set_direction(pin, GPIO_MODE_OUTPUT);
  50. }
  51. /*TODO:set gpio out put mode */
  52. }
  53. static rt_err_t mcu_pin_attach_irq(struct rt_device *device, rt_int32_t pin,
  54. rt_uint32_t irq_mode, void (*hdr)(void *args), void *args)
  55. {
  56. /*TODO: start irq handle */
  57. return RT_EOK;
  58. }
  59. static rt_err_t mcu_pin_dettach_irq(struct rt_device *device, rt_int32_t pin)
  60. {
  61. /*TODO:disable gpio irq handle */
  62. return RT_EOK;
  63. }
  64. static rt_err_t mcu_pin_irq_enable(struct rt_device *device, rt_base_t pin,
  65. rt_uint32_t enabled)
  66. {
  67. /*TODO:start irq handle */
  68. return RT_EOK;
  69. }
  70. const static struct rt_pin_ops _mcu_pin_ops =
  71. {
  72. mcu_pin_mode,
  73. mcu_pin_write,
  74. mcu_pin_read,
  75. mcu_pin_attach_irq,
  76. mcu_pin_dettach_irq,
  77. mcu_pin_irq_enable,
  78. ///NULL,
  79. };
  80. int rt_hw_pin_init(void)
  81. {
  82. /*TODO: INIT THE GPIO CLOCK AND OTHER */
  83. return rt_device_pin_register("pin", &_mcu_pin_ops, RT_NULL);
  84. }
  85. INIT_BOARD_EXPORT(rt_hw_pin_init);
  86. #endif /* RT_USING_PIN */