rtc_io_hal.c 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. #include "soc/soc_caps.h"
  17. #if SOC_RTCIO_INPUT_OUTPUT_SUPPORTED
  18. void rtcio_hal_set_direction(int rtcio_num, rtc_gpio_mode_t mode)
  19. {
  20. switch (mode) {
  21. case RTC_GPIO_MODE_INPUT_ONLY:
  22. rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_NORMAL);
  23. rtcio_ll_output_disable(rtcio_num);
  24. rtcio_ll_input_enable(rtcio_num);
  25. break;
  26. case RTC_GPIO_MODE_OUTPUT_ONLY:
  27. rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_NORMAL);
  28. rtcio_ll_output_enable(rtcio_num);
  29. rtcio_ll_input_disable(rtcio_num);
  30. break;
  31. case RTC_GPIO_MODE_INPUT_OUTPUT:
  32. rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_NORMAL);
  33. rtcio_ll_output_enable(rtcio_num);
  34. rtcio_ll_input_enable(rtcio_num);
  35. break;
  36. case RTC_GPIO_MODE_DISABLED:
  37. rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_NORMAL);
  38. rtcio_ll_output_disable(rtcio_num);
  39. rtcio_ll_input_disable(rtcio_num);
  40. break;
  41. case RTC_GPIO_MODE_OUTPUT_OD:
  42. rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_OD);
  43. rtcio_ll_output_enable(rtcio_num);
  44. rtcio_ll_input_disable(rtcio_num);
  45. break;
  46. case RTC_GPIO_MODE_INPUT_OUTPUT_OD:
  47. rtcio_ll_output_mode_set(rtcio_num, RTCIO_OUTPUT_OD);
  48. rtcio_ll_output_enable(rtcio_num);
  49. rtcio_ll_input_enable(rtcio_num);
  50. break;
  51. default:
  52. break;
  53. }
  54. }
  55. void rtcio_hal_isolate(int rtcio_num)
  56. {
  57. rtcio_ll_pullup_disable(rtcio_num);
  58. rtcio_ll_pulldown_disable(rtcio_num);
  59. rtcio_ll_output_disable(rtcio_num);
  60. rtcio_ll_input_disable(rtcio_num);
  61. rtcio_ll_force_hold_enable(rtcio_num);
  62. }
  63. void rtcio_hal_set_direction_in_sleep(int rtcio_num, rtc_gpio_mode_t mode)
  64. {
  65. switch (mode) {
  66. case RTC_GPIO_MODE_INPUT_ONLY:
  67. rtcio_ll_in_sleep_enable_input(rtcio_num);
  68. rtcio_ll_in_sleep_disable_output(rtcio_num);
  69. rtcio_ll_enable_sleep_setting(rtcio_num);
  70. break;
  71. case RTC_GPIO_MODE_OUTPUT_ONLY:
  72. rtcio_ll_enable_output_in_sleep(rtcio_num);
  73. rtcio_ll_in_sleep_disable_input(rtcio_num);
  74. rtcio_ll_enable_sleep_setting(rtcio_num);
  75. break;
  76. case RTC_GPIO_MODE_INPUT_OUTPUT:
  77. rtcio_ll_in_sleep_enable_input(rtcio_num);
  78. rtcio_ll_enable_output_in_sleep(rtcio_num);
  79. rtcio_ll_enable_sleep_setting(rtcio_num);
  80. break;
  81. case RTC_GPIO_MODE_DISABLED:
  82. rtcio_ll_in_sleep_disable_input(rtcio_num);
  83. rtcio_ll_in_sleep_disable_output(rtcio_num);
  84. rtcio_ll_disable_sleep_setting(rtcio_num);
  85. break;
  86. default:
  87. break;
  88. }
  89. }
  90. #endif