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