drv_io_config.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. };
  60. static int print_io_config()
  61. {
  62. int i;
  63. rt_kprintf("IO Configuration Table\n");
  64. rt_kprintf("┌───────┬────────────────────────┐\n");
  65. rt_kprintf("│Pin │Function │\n");
  66. rt_kprintf("├───────┼────────────────────────┤\n");
  67. for(i = 0; i < sizeof io_config / sizeof io_config[0]; i++)
  68. {
  69. rt_kprintf("│%-2d │%-24.24s│\n", io_config[i].io_num, io_config[i].func_name);
  70. }
  71. rt_kprintf("└───────┴────────────────────────┘\n");
  72. return 0;
  73. }
  74. MSH_CMD_EXPORT_ALIAS(print_io_config, io, print io config);
  75. int io_config_init(void)
  76. {
  77. int count = sizeof(io_config) / sizeof(io_config[0]);
  78. int i;
  79. sysctl_set_power_mode(SYSCTL_POWER_BANK0, SYSCTL_POWER_V18);
  80. sysctl_set_power_mode(SYSCTL_POWER_BANK1, SYSCTL_POWER_V18);
  81. sysctl_set_power_mode(SYSCTL_POWER_BANK2, SYSCTL_POWER_V18);
  82. for(i = 0; i < count; i++)
  83. {
  84. fpioa_set_function(io_config[i].io_num, io_config[i].func);
  85. }
  86. #if defined(BSP_USING_CAMERA) || defined(BSP_USING_LCD)
  87. sysctl_set_spi0_dvp_data(1);
  88. #endif
  89. }
  90. INIT_BOARD_EXPORT(io_config_init);