drv_io_config.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. /*
  2. * Copyright (c) 2006-2018, 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. #endif
  28. #ifdef BSP_USING_CAMERA
  29. IOCONFIG(BSP_CAMERA_SCCB_SDA_PIN, FUNC_SCCB_SDA),
  30. IOCONFIG(BSP_CAMERA_SCCB_SCLK_PIN, FUNC_SCCB_SCLK),
  31. IOCONFIG(BSP_CAMERA_CMOS_RST_PIN, FUNC_CMOS_RST),
  32. IOCONFIG(BSP_CAMERA_CMOS_VSYNC_PIN, FUNC_CMOS_VSYNC),
  33. IOCONFIG(BSP_CAMERA_CMOS_PWDN_PIN, FUNC_CMOS_PWDN),
  34. IOCONFIG(BSP_CAMERA_CMOS_XCLK_PIN, FUNC_CMOS_XCLK),
  35. IOCONFIG(BSP_CAMERA_CMOS_PCLK_PIN, FUNC_CMOS_PCLK),
  36. IOCONFIG(BSP_CAMERA_CMOS_HREF_PIN, FUNC_CMOS_HREF),
  37. #endif
  38. #ifdef BSP_USING_SPI1
  39. IOCONFIG(BSP_SPI1_CLK_PIN, FUNC_SPI1_SCLK),
  40. IOCONFIG(BSP_SPI1_D0_PIN, FUNC_SPI1_D0),
  41. IOCONFIG(BSP_SPI1_D1_PIN, FUNC_SPI1_D1),
  42. #ifdef BSP_USING_SPI1_AS_QSPI
  43. IOCONFIG(BSP_SPI1_D2_PIN, FUNC_SPI1_D2),
  44. IOCONFIG(BSP_SPI1_D3_PIN, FUNC_SPI1_D3),
  45. #endif
  46. #ifdef BSP_SPI1_USING_SS0
  47. IOCONFIG(BSP_SPI1_SS0_PIN, HS_GPIO(SPI1_CS0_PIN)),
  48. #endif
  49. #ifdef BSP_SPI1_USING_SS1
  50. IOCONFIG(BSP_SPI1_SS1_PIN, HS_GPIO(SPI1_CS1_PIN)),
  51. #endif
  52. #ifdef BSP_SPI1_USING_SS2
  53. IOCONFIG(BSP_SPI1_SS2_PIN, HS_GPIO(SPI1_CS2_PIN)),
  54. #endif
  55. #ifdef BSP_SPI1_USING_SS3
  56. IOCONFIG(BSP_SPI1_SS3_PIN, HS_GPIO(SPI1_CS3_PIN)),
  57. #endif
  58. #endif
  59. #ifdef BSP_USING_UART1
  60. IOCONFIG(BSP_UART1_TXD_PIN, FUNC_UART1_TX),
  61. IOCONFIG(BSP_UART1_RXD_PIN, FUNC_UART1_RX),
  62. #endif
  63. #ifdef BSP_USING_UART2
  64. IOCONFIG(BSP_UART2_TXD_PIN, FUNC_UART2_TX),
  65. IOCONFIG(BSP_UART2_RXD_PIN, FUNC_UART2_RX),
  66. #endif
  67. #ifdef BSP_USING_UART3
  68. IOCONFIG(BSP_UART3_TXD_PIN, FUNC_UART3_TX),
  69. IOCONFIG(BSP_UART3_RXD_PIN, FUNC_UART3_RX),
  70. #endif
  71. };
  72. static int print_io_config()
  73. {
  74. int i;
  75. rt_kprintf("IO Configuration Table\n");
  76. rt_kprintf("┌───────┬────────────────────────┐\n");
  77. rt_kprintf("│Pin │Function │\n");
  78. rt_kprintf("├───────┼────────────────────────┤\n");
  79. for(i = 0; i < sizeof io_config / sizeof io_config[0]; i++)
  80. {
  81. rt_kprintf("│%-2d │%-24.24s│\n", io_config[i].io_num, io_config[i].func_name);
  82. }
  83. rt_kprintf("└───────┴────────────────────────┘\n");
  84. return 0;
  85. }
  86. MSH_CMD_EXPORT_ALIAS(print_io_config, io, print io config);
  87. int io_config_init(void)
  88. {
  89. int count = sizeof(io_config) / sizeof(io_config[0]);
  90. int i;
  91. sysctl_set_power_mode(SYSCTL_POWER_BANK0, SYSCTL_POWER_V18);
  92. sysctl_set_power_mode(SYSCTL_POWER_BANK1, SYSCTL_POWER_V18);
  93. sysctl_set_power_mode(SYSCTL_POWER_BANK2, SYSCTL_POWER_V18);
  94. #ifdef BSP_USING_UART2
  95. // for IO-27/28
  96. sysctl_set_power_mode(SYSCTL_POWER_BANK4, SYSCTL_POWER_V33);
  97. #endif
  98. #if defined(BSP_USING_UART1) || defined(BSP_USING_UART3)
  99. // for IO-20~23
  100. sysctl_set_power_mode(SYSCTL_POWER_BANK3, SYSCTL_POWER_V33);
  101. #endif
  102. for(i = 0; i < count; i++)
  103. {
  104. fpioa_set_function(io_config[i].io_num, io_config[i].func);
  105. }
  106. #if defined(BSP_USING_CAMERA) || defined(BSP_USING_LCD)
  107. sysctl_set_spi0_dvp_data(1);
  108. #endif
  109. }
  110. INIT_BOARD_EXPORT(io_config_init);