iomux_base.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /*
  2. * Copyright (c) 2021 Rockchip Electronics Co., Ltd.
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2021-10-12 Steven Liu first implementation
  9. */
  10. #include "rtdef.h"
  11. #include "iomux.h"
  12. #include "hal_base.h"
  13. /**
  14. * @brief Config iomux for M4 JTAG
  15. */
  16. rt_weak void m4_jtag_iomux_config(void)
  17. {
  18. HAL_PINCTRL_SetIOMUX(GPIO_BANK0,
  19. GPIO_PIN_C7 | // M4_JTAG_TCK
  20. GPIO_PIN_D0, // M4_JTAG_TMS
  21. PIN_CONFIG_MUX_FUNC2);
  22. }
  23. /**
  24. * @brief Config iomux for UART0
  25. */
  26. rt_weak void uart0_iomux_config(void)
  27. {
  28. HAL_PINCTRL_SetIOMUX(GPIO_BANK0,
  29. GPIO_PIN_C7 | // UART0_RX
  30. GPIO_PIN_D0, // UART0_TX
  31. PIN_CONFIG_MUX_FUNC1);
  32. }
  33. /**
  34. * @brief Config iomux for UART1
  35. */
  36. rt_weak void uart1_m0_iomux_config(void)
  37. {
  38. HAL_PINCTRL_SetIOMUX(GPIO_BANK0,
  39. GPIO_PIN_D1 | // UART1_RX_M0
  40. GPIO_PIN_D2, // UART1_TX_M0
  41. PIN_CONFIG_MUX_FUNC2);
  42. WRITE_REG_MASK_WE(GRF->SOC_CON5,
  43. GRF_SOC_CON5_GRF_CON_UART1_IOMUX_SEL_MASK,
  44. (0 << GRF_SOC_CON5_GRF_CON_UART1_IOMUX_SEL_SHIFT));
  45. }
  46. rt_weak void uart1_m1_iomux_config(void)
  47. {
  48. HAL_PINCTRL_SetIOMUX(GPIO_BANK0,
  49. GPIO_PIN_A5 | // UART1_RX_M1
  50. GPIO_PIN_A4, // UART1_TX_M1
  51. PIN_CONFIG_MUX_FUNC2);
  52. WRITE_REG_MASK_WE(GRF->SOC_CON5,
  53. GRF_SOC_CON5_GRF_CON_UART1_IOMUX_SEL_MASK,
  54. (1 << GRF_SOC_CON5_GRF_CON_UART1_IOMUX_SEL_SHIFT));
  55. }
  56. rt_weak void uart1_m2_iomux_config(void)
  57. {
  58. HAL_PINCTRL_SetIOMUX(GPIO_BANK1,
  59. GPIO_PIN_B1 | // UART1_RX_M2
  60. GPIO_PIN_B0, // UART1_TX_M2
  61. PIN_CONFIG_MUX_FUNC3);
  62. WRITE_REG_MASK_WE(GRF->SOC_CON5,
  63. GRF_SOC_CON5_GRF_CON_UART1_IOMUX_SEL_MASK,
  64. (2 << GRF_SOC_CON5_GRF_CON_UART1_IOMUX_SEL_SHIFT));
  65. }
  66. rt_weak void uart1_m3_iomux_config(void)
  67. {
  68. HAL_PINCTRL_SetIOMUX(GPIO_BANK0,
  69. GPIO_PIN_A5, // UART1_RX_M3
  70. PIN_CONFIG_MUX_FUNC2);
  71. HAL_PINCTRL_SetIOMUX(GPIO_BANK0,
  72. GPIO_PIN_B1, // UART1_TX_M3
  73. PIN_CONFIG_MUX_FUNC4);
  74. WRITE_REG_MASK_WE(GRF->SOC_CON5,
  75. GRF_SOC_CON5_GRF_CON_UART1_IOMUX_SEL_MASK,
  76. (3 << GRF_SOC_CON5_GRF_CON_UART1_IOMUX_SEL_SHIFT));
  77. }
  78. /**
  79. * @brief Config iomux for UART2
  80. */
  81. rt_weak void uart2_iomux_config(void)
  82. {
  83. HAL_PINCTRL_SetIOMUX(GPIO_BANK1,
  84. GPIO_PIN_A0 | // UART2_RX
  85. GPIO_PIN_A1 | // UART2_TX
  86. GPIO_PIN_A2 | // UART2_CTS
  87. GPIO_PIN_A3, // UART2_RTS
  88. PIN_CONFIG_MUX_FUNC4);
  89. }
  90. /**
  91. * @brief Config iomux for RK2108
  92. */
  93. rt_weak void rt_hw_iomux_config(void)
  94. {
  95. uart2_iomux_config();
  96. #ifdef M4_JTAG_ENABLE
  97. m4_jtag_iomux_config();
  98. #else
  99. uart0_iomux_config();
  100. #endif
  101. }