rtc_io_hal.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. // Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. // The HAL layer for RTC IO (common part)
  15. #include "hal/rtc_io_hal.h"
  16. #if SOC_RTCIO_INPUT_OUTPUT_SUPPORTED
  17. void rtcio_hal_set_direction(int rtcio_num, rtc_gpio_mode_t mode)
  18. {
  19. switch (mode) {
  20. case RTC_GPIO_MODE_INPUT_ONLY:
  21. rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_NORMAL);
  22. rtcio_ll_output_disable(rtcio_num);
  23. rtcio_ll_input_enable(rtcio_num);
  24. break;
  25. case RTC_GPIO_MODE_OUTPUT_ONLY:
  26. rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_NORMAL);
  27. rtcio_ll_output_enable(rtcio_num);
  28. rtcio_ll_input_disable(rtcio_num);
  29. break;
  30. case RTC_GPIO_MODE_INPUT_OUTPUT:
  31. rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_NORMAL);
  32. rtcio_ll_output_enable(rtcio_num);
  33. rtcio_ll_input_enable(rtcio_num);
  34. break;
  35. case RTC_GPIO_MODE_DISABLED:
  36. rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_NORMAL);
  37. rtcio_ll_output_disable(rtcio_num);
  38. rtcio_ll_input_disable(rtcio_num);
  39. break;
  40. case RTC_GPIO_MODE_OUTPUT_OD:
  41. rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_OD);
  42. rtcio_ll_output_enable(rtcio_num);
  43. rtcio_ll_input_disable(rtcio_num);
  44. break;
  45. case RTC_GPIO_MODE_INPUT_OUTPUT_OD:
  46. rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_OD);
  47. rtcio_ll_output_enable(rtcio_num);
  48. rtcio_ll_input_enable(rtcio_num);
  49. break;
  50. default:
  51. break;
  52. }
  53. }
  54. void rtcio_hal_isolate(int rtcio_num)
  55. {
  56. rtcio_ll_pullup_disable(rtcio_num);
  57. rtcio_ll_pulldown_disable(rtcio_num);
  58. rtcio_ll_output_disable(rtcio_num);
  59. rtcio_ll_input_disable(rtcio_num);
  60. rtcio_ll_force_hold_enable(rtcio_num);
  61. }
  62. void rtcio_hal_set_direction_in_sleep(int rtcio_num, rtc_gpio_mode_t mode)
  63. {
  64. switch (mode) {
  65. case RTC_GPIO_MODE_INPUT_ONLY:
  66. rtcio_ll_in_sleep_enable_input(rtcio_num);
  67. rtcio_ll_in_sleep_disable_output(rtcio_num);
  68. rtcio_ll_enable_sleep_setting(rtcio_num);
  69. break;
  70. case RTC_GPIO_MODE_OUTPUT_ONLY:
  71. rtcio_ll_enable_output_in_sleep(rtcio_num);
  72. rtcio_ll_in_sleep_disable_input(rtcio_num);
  73. rtcio_ll_enable_sleep_setting(rtcio_num);
  74. break;
  75. case RTC_GPIO_MODE_INPUT_OUTPUT:
  76. rtcio_ll_in_sleep_enable_input(rtcio_num);
  77. rtcio_ll_enable_output_in_sleep(rtcio_num);
  78. rtcio_ll_enable_sleep_setting(rtcio_num);
  79. break;
  80. case RTC_GPIO_MODE_DISABLED:
  81. rtcio_ll_in_sleep_disable_input(rtcio_num);
  82. rtcio_ll_in_sleep_disable_output(rtcio_num);
  83. rtcio_ll_disable_sleep_setting(rtcio_num);
  84. break;
  85. default:
  86. break;
  87. }
  88. }
  89. #endif