drv_io_config.c 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2019-03-19 ZYH first version
  9. */
  10. #include <rtthread.h>
  11. #include <fpioa.h>
  12. #include <drv_io_config.h>
  13. #include <sysctl.h>
  14. #define HS_GPIO(n) (FUNC_GPIOHS0 + n)
  15. #define IOCONFIG(pin,func) {pin, func, #func}
  16. static struct io_config
  17. {
  18. int io_num;
  19. fpioa_function_t func;
  20. const char * func_name;
  21. } io_config[] =
  22. {
  23. #ifdef BSP_USING_LCD
  24. IOCONFIG(BSP_LCD_CS_PIN, FUNC_SPI0_SS0), /* LCD CS PIN */
  25. IOCONFIG(BSP_LCD_WR_PIN, FUNC_SPI0_SCLK), /* LCD WR PIN */
  26. IOCONFIG(BSP_LCD_DC_PIN, HS_GPIO(LCD_DC_PIN)), /* LCD DC PIN */
  27. #if BSP_LCD_RST_PIN >= 0
  28. IOCONFIG(BSP_LCD_RST_PIN, HS_GPIO(LCD_RST_PIN)), /* LCD RESET PIN */
  29. #endif
  30. #if BSP_LCD_BACKLIGHT_PIN >= 0
  31. IOCONFIG(BSP_LCD_BACKLIGHT_PIN, HS_GPIO(LCD_BACKLIGHT_PIN)), /* LCD BACKLIGHT PIN */
  32. #endif
  33. #endif
  34. #ifdef BSP_USING_CAMERA
  35. IOCONFIG(BSP_CAMERA_SCCB_SDA_PIN, FUNC_SCCB_SDA),
  36. IOCONFIG(BSP_CAMERA_SCCB_SCLK_PIN, FUNC_SCCB_SCLK),
  37. IOCONFIG(BSP_CAMERA_CMOS_RST_PIN, FUNC_CMOS_RST),
  38. IOCONFIG(BSP_CAMERA_CMOS_VSYNC_PIN, FUNC_CMOS_VSYNC),
  39. IOCONFIG(BSP_CAMERA_CMOS_PWDN_PIN, FUNC_CMOS_PWDN),
  40. IOCONFIG(BSP_CAMERA_CMOS_XCLK_PIN, FUNC_CMOS_XCLK),
  41. IOCONFIG(BSP_CAMERA_CMOS_PCLK_PIN, FUNC_CMOS_PCLK),
  42. IOCONFIG(BSP_CAMERA_CMOS_HREF_PIN, FUNC_CMOS_HREF),
  43. #endif
  44. #ifdef BSP_USING_SPI1
  45. IOCONFIG(BSP_SPI1_CLK_PIN, FUNC_SPI1_SCLK),
  46. IOCONFIG(BSP_SPI1_D0_PIN, FUNC_SPI1_D0),
  47. IOCONFIG(BSP_SPI1_D1_PIN, FUNC_SPI1_D1),
  48. #ifdef BSP_USING_SPI1_AS_QSPI
  49. IOCONFIG(BSP_SPI1_D2_PIN, FUNC_SPI1_D2),
  50. IOCONFIG(BSP_SPI1_D3_PIN, FUNC_SPI1_D3),
  51. #endif
  52. #ifdef BSP_SPI1_USING_SS0
  53. IOCONFIG(BSP_SPI1_SS0_PIN, HS_GPIO(SPI1_CS0_PIN)),
  54. #endif
  55. #ifdef BSP_SPI1_USING_SS1
  56. IOCONFIG(BSP_SPI1_SS1_PIN, HS_GPIO(SPI1_CS1_PIN)),
  57. #endif
  58. #ifdef BSP_SPI1_USING_SS2
  59. IOCONFIG(BSP_SPI1_SS2_PIN, HS_GPIO(SPI1_CS2_PIN)),
  60. #endif
  61. #ifdef BSP_SPI1_USING_SS3
  62. IOCONFIG(BSP_SPI1_SS3_PIN, HS_GPIO(SPI1_CS3_PIN)),
  63. #endif
  64. #endif
  65. #ifdef BSP_USING_UART1
  66. IOCONFIG(BSP_UART1_TXD_PIN, FUNC_UART1_TX),
  67. IOCONFIG(BSP_UART1_RXD_PIN, FUNC_UART1_RX),
  68. #endif
  69. #ifdef BSP_USING_UART2
  70. IOCONFIG(BSP_UART2_TXD_PIN, FUNC_UART2_TX),
  71. IOCONFIG(BSP_UART2_RXD_PIN, FUNC_UART2_RX),
  72. #endif
  73. #ifdef BSP_USING_UART3
  74. IOCONFIG(BSP_UART3_TXD_PIN, FUNC_UART3_TX),
  75. IOCONFIG(BSP_UART3_RXD_PIN, FUNC_UART3_RX),
  76. #endif
  77. };
  78. static int print_io_config()
  79. {
  80. int i;
  81. rt_kprintf("IO Configuration Table\n");
  82. rt_kprintf("┌───────┬────────────────────────┐\n");
  83. rt_kprintf("│Pin │Function │\n");
  84. rt_kprintf("├───────┼────────────────────────┤\n");
  85. for(i = 0; i < sizeof io_config / sizeof io_config[0]; i++)
  86. {
  87. rt_kprintf("│%-2d │%-24.24s│\n", io_config[i].io_num, io_config[i].func_name);
  88. }
  89. rt_kprintf("└───────┴────────────────────────┘\n");
  90. return 0;
  91. }
  92. MSH_CMD_EXPORT_ALIAS(print_io_config, io, print io config);
  93. int io_config_init(void)
  94. {
  95. int count = sizeof(io_config) / sizeof(io_config[0]);
  96. int i;
  97. sysctl_set_power_mode(SYSCTL_POWER_BANK0, SYSCTL_POWER_V18);
  98. sysctl_set_power_mode(SYSCTL_POWER_BANK1, SYSCTL_POWER_V18);
  99. sysctl_set_power_mode(SYSCTL_POWER_BANK2, SYSCTL_POWER_V18);
  100. #ifdef BSP_USING_UART2
  101. // for IO-27/28
  102. sysctl_set_power_mode(SYSCTL_POWER_BANK4, SYSCTL_POWER_V33);
  103. #endif
  104. #if defined(BSP_USING_UART1) || defined(BSP_USING_UART3)
  105. // for IO-20~23
  106. sysctl_set_power_mode(SYSCTL_POWER_BANK3, SYSCTL_POWER_V33);
  107. #endif
  108. for(i = 0; i < count; i++)
  109. {
  110. fpioa_set_function(io_config[i].io_num, io_config[i].func);
  111. }
  112. #if defined(BSP_USING_CAMERA) || defined(BSP_USING_LCD)
  113. sysctl_set_spi0_dvp_data(1);
  114. #endif
  115. }
  116. INIT_BOARD_EXPORT(io_config_init);