1 /*
2 * Copyright (c) 2006-2024, RT-Thread Development Team
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Change Logs:
7 * Date Author Notes
8 * 2024-04-08 QT-one first version
9 */
10
11 #include "ht32_msp.h"
12
13 /* GPIO configuration for UART */
14 #ifdef BSP_USING_UART
ht32_usart_gpio_init(void * instance)15 void ht32_usart_gpio_init(void *instance)
16 {
17 CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
18 HT_USART_TypeDef *usart_x = (HT_USART_TypeDef *)instance;
19 #ifdef BSP_USING_USART0
20 if (HT_USART0 == usart_x)
21 {
22 CKCUClock.Bit.HTCFG_USART0_TX_GPIO_CLK = 1;
23 CKCUClock.Bit.HTCFG_USART0_RX_GPIO_CLK = 1;
24 CKCU_PeripClockConfig(CKCUClock, ENABLE);
25 /* Turn on UxART Rx internal pull up resistor to prevent unknow state */
26 GPIO_PullResistorConfig(HTCFG_USART0_RX_GPIO_PORT, HTCFG_USART0_RX_GPIO_PIN, GPIO_PR_UP);
27 /* Config AFIO mode as UxART function */
28 AFIO_GPxConfig(HTCFG_USART0_TX_GPIO_ID, HTCFG_USART0_TX_GPIO_PIN, AFIO_FUN_USART_UART);
29 AFIO_GPxConfig(HTCFG_USART0_RX_GPIO_ID, HTCFG_USART0_RX_GPIO_PIN, AFIO_FUN_USART_UART);
30 }
31 #endif
32 #ifdef BSP_USING_USART1
33 if (HT_USART1 == usart_x)
34 {
35 CKCUClock.Bit.HTCFG_USART1_TX_GPIO_CLK = 1;
36 CKCUClock.Bit.HTCFG_USART1_RX_GPIO_CLK = 1;
37 CKCU_PeripClockConfig(CKCUClock, ENABLE);
38 /* Turn on UxART Rx internal pull up resistor to prevent unknow state */
39 GPIO_PullResistorConfig(HTCFG_USART1_RX_GPIO_PORT, HTCFG_USART1_RX_GPIO_PIN, GPIO_PR_UP);
40 /* Config AFIO mode as UxART function */
41 AFIO_GPxConfig(HTCFG_USART1_TX_GPIO_ID, HTCFG_USART1_TX_GPIO_PIN, AFIO_FUN_USART_UART);
42 AFIO_GPxConfig(HTCFG_USART1_RX_GPIO_ID, HTCFG_USART1_RX_GPIO_PIN, AFIO_FUN_USART_UART);
43 }
44 #endif
45 #ifdef BSP_USING_UART0
46 if (HT_UART0 == usart_x)
47 {
48 CKCUClock.Bit.HTCFG_UART0_TX_GPIO_CLK = 1;
49 CKCUClock.Bit.HTCFG_UART0_RX_GPIO_CLK = 1;
50 CKCU_PeripClockConfig(CKCUClock, ENABLE);
51 /* Turn on UxART Rx internal pull up resistor to prevent unknow state */
52 GPIO_PullResistorConfig(HTCFG_UART0_RX_GPIO_PORT, HTCFG_UART0_RX_GPIO_PIN, GPIO_PR_UP);
53 /* Config AFIO mode as UxART function */
54 AFIO_GPxConfig(HTCFG_UART0_TX_GPIO_ID, HTCFG_UART0_TX_GPIO_PIN, AFIO_FUN_USART_UART);
55 AFIO_GPxConfig(HTCFG_UART0_RX_GPIO_ID, HTCFG_UART0_RX_GPIO_PIN, AFIO_FUN_USART_UART);
56 }
57 #endif
58 #ifdef BSP_USING_UART1
59 if (HT_UART1 == usart_x)
60 {
61 CKCUClock.Bit.HTCFG_UART1_TX_GPIO_CLK = 1;
62 CKCUClock.Bit.HTCFG_UART1_RX_GPIO_CLK = 1;
63 CKCU_PeripClockConfig(CKCUClock, ENABLE);
64 /* Turn on UxART Rx internal pull up resistor to prevent unknow state */
65 GPIO_PullResistorConfig(HTCFG_UART1_RX_GPIO_PORT, HTCFG_UART1_RX_GPIO_PIN, GPIO_PR_UP);
66 /* Config AFIO mode as UxART function */
67 AFIO_GPxConfig(HTCFG_UART1_TX_GPIO_ID, HTCFG_UART1_TX_GPIO_PIN, AFIO_FUN_USART_UART);
68 AFIO_GPxConfig(HTCFG_UART1_RX_GPIO_ID, HTCFG_UART1_RX_GPIO_PIN, AFIO_FUN_USART_UART);
69 }
70 #endif
71 }
72 #endif
73
74 /* GPIO configuration for SPI */
75 #ifdef BSP_USING_SPI
ht32_spi_gpio_init(void * instance)76 void ht32_spi_gpio_init(void *instance)
77 {
78 CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
79 HT_SPI_TypeDef *spi_x = (HT_SPI_TypeDef *)instance;
80 #ifdef BSP_USING_SPI0
81 if (HT_SPI0 == spi_x)
82 {
83 CKCUClock.Bit.HTCFG_SPI0_SCK_GPIO_CLK = 1;
84 CKCUClock.Bit.HTCFG_SPI0_MISO_GPIO_CLK = 1;
85 CKCUClock.Bit.HTCFG_SPI0_MOSI_GPIO_CLK = 1;
86 CKCU_PeripClockConfig(CKCUClock, ENABLE);
87
88 AFIO_GPxConfig(HTCFG_SPI0_SCK_GPIO_ID, HTCFG_SPI0_SCK_GPIO_PIN, AFIO_FUN_SPI);
89 AFIO_GPxConfig(HTCFG_SPI0_MISO_GPIO_ID, HTCFG_SPI0_MISO_GPIO_PIN, AFIO_FUN_SPI);
90 AFIO_GPxConfig(HTCFG_SPI0_MOSI_GPIO_ID, HTCFG_SPI0_MOSI_GPIO_PIN, AFIO_FUN_SPI);
91 }
92 #endif
93 #ifdef BSP_USING_SPI1
94 if (HT_SPI1 == spi_x)
95 {
96 CKCUClock.Bit.HTCFG_SPI1_SCK_GPIO_CLK = 1;
97 CKCUClock.Bit.HTCFG_SPI1_MISO_GPIO_CLK = 1;
98 CKCUClock.Bit.HTCFG_SPI1_MOSI_GPIO_CLK = 1;
99 CKCU_PeripClockConfig(CKCUClock, ENABLE);
100
101 AFIO_GPxConfig(HTCFG_SPI1_SCK_GPIO_ID, HTCFG_SPI1_SCK_GPIO_PIN, AFIO_FUN_SPI);
102 AFIO_GPxConfig(HTCFG_SPI1_MISO_GPIO_ID, HTCFG_SPI1_MISO_GPIO_PIN, AFIO_FUN_SPI);
103 AFIO_GPxConfig(HTCFG_SPI1_MOSI_GPIO_ID, HTCFG_SPI1_MOSI_GPIO_PIN, AFIO_FUN_SPI);
104 }
105 #endif
106 }
107 #endif
108
109 /* GPIO configuration for I2C */
110 #ifdef BSP_USING_I2C_HW
ht32_hardware_i2c_gpio_init(void * instance)111 void ht32_hardware_i2c_gpio_init(void *instance)
112 {
113 CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
114 HT_I2C_TypeDef *i2c_x = (HT_I2C_TypeDef *)instance;
115 #ifdef BSP_USING_I2C0_HW
116 if (HT_I2C0 == i2c_x)
117 {
118 CKCUClock.Bit.HTCFG_I2C0_SCL_GPIO_CLK = 1;
119 CKCUClock.Bit.HTCFG_I2C0_SDA_GPIO_CLK = 1;
120 CKCU_PeripClockConfig(CKCUClock, ENABLE);
121 /* Configure GPIO to I2C mode */
122 AFIO_GPxConfig(HTCFG_I2C0_SCL_GPIO_ID, HTCFG_I2C0_SCL_GPIO_PIN, AFIO_FUN_I2C);
123 AFIO_GPxConfig(HTCFG_I2C0_SDA_GPIO_ID, HTCFG_I2C0_SDA_GPIO_PIN, AFIO_FUN_I2C);
124 }
125 #endif
126 #ifdef BSP_USING_I2C1_HW
127 if (HT_I2C1 == i2c_x)
128 {
129 CKCUClock.Bit.HTCFG_I2C1_SCL_GPIO_CLK = 1;
130 CKCUClock.Bit.HTCFG_I2C1_SDA_GPIO_CLK = 1;
131 CKCU_PeripClockConfig(CKCUClock, ENABLE);
132 /* Configure GPIO to I2C mode */
133 AFIO_GPxConfig(HTCFG_I2C1_SCL_GPIO_ID, HTCFG_I2C1_SCL_GPIO_PIN, AFIO_FUN_I2C);
134 AFIO_GPxConfig(HTCFG_I2C1_SDA_GPIO_ID, HTCFG_I2C1_SDA_GPIO_PIN, AFIO_FUN_I2C);
135 }
136 #endif
137 }
138 #endif
139
140 /* GPIO configuration for ADC */
141 #ifdef BSP_USING_ADC
ht32_adc_gpio_init(void * instance,int8_t channel)142 void ht32_adc_gpio_init(void *instance,int8_t channel)
143 {
144 CKCU_PeripClockConfig_TypeDef CKCUClock = {{ 0 }};
145 HT_ADC_TypeDef *adc_x = (HT_ADC_TypeDef *)instance;
146 #ifdef BSP_USING_ADC0
147 if (HT_ADC0 == adc_x)
148 {
149 /* Enable peripheral clock */
150 CKCUClock.Bit.AFIO = 1;
151 CKCUClock.Bit.ADC0 = 1;
152 CKCU_PeripClockConfig(CKCUClock, ENABLE);
153
154 /* Configure AFIO mode as ADC function */
155 switch(channel)
156 {
157 case 0:
158 AFIO_GPxConfig(HTCFG_ADC0CH0_GPIO_ID, HTCFG_ADC0CH0_AFIO_PIN, AFIO_FUN_ADC0);
159 break;
160 case 1:
161 AFIO_GPxConfig(HTCFG_ADC0CH1_GPIO_ID, HTCFG_ADC0CH1_AFIO_PIN, AFIO_FUN_ADC0);
162 break;
163 case 2:
164 AFIO_GPxConfig(HTCFG_ADC0CH2_GPIO_ID, HTCFG_ADC0CH2_AFIO_PIN, AFIO_FUN_ADC0);
165 break;
166 case 3:
167 AFIO_GPxConfig(HTCFG_ADC0CH3_GPIO_ID, HTCFG_ADC0CH3_AFIO_PIN, AFIO_FUN_ADC0);
168 break;
169 case 4:
170 AFIO_GPxConfig(HTCFG_ADC0CH4_GPIO_ID, HTCFG_ADC0CH4_AFIO_PIN, AFIO_FUN_ADC0);
171 break;
172 case 5:
173 AFIO_GPxConfig(HTCFG_ADC0CH5_GPIO_ID, HTCFG_ADC0CH5_AFIO_PIN, AFIO_FUN_ADC0);
174 break;
175 case 6:
176 AFIO_GPxConfig(HTCFG_ADC0CH6_GPIO_ID, HTCFG_ADC0CH6_AFIO_PIN, AFIO_FUN_ADC0);
177 break;
178 case 7:
179 AFIO_GPxConfig(HTCFG_ADC0CH7_GPIO_ID, HTCFG_ADC0CH7_AFIO_PIN, AFIO_FUN_ADC0);
180 break;
181 case 8:
182 AFIO_GPxConfig(HTCFG_ADC0CH8_GPIO_ID, HTCFG_ADC0CH8_AFIO_PIN, AFIO_FUN_ADC0);
183 break;
184 case 9:
185 AFIO_GPxConfig(HTCFG_ADC0CH9_GPIO_ID, HTCFG_ADC0CH9_AFIO_PIN, AFIO_FUN_ADC0);
186 break;
187 case 10:
188 AFIO_GPxConfig(HTCFG_ADC0CH10_GPIO_ID, HTCFG_ADC0CH10_AFIO_PIN, AFIO_FUN_ADC0);
189 break;
190 case 11:
191 AFIO_GPxConfig(HTCFG_ADC0CH11_GPIO_ID, HTCFG_ADC0CH11_AFIO_PIN, AFIO_FUN_ADC0);
192 break;
193 case 12:
194 AFIO_GPxConfig(HTCFG_ADC0CH12_GPIO_ID, HTCFG_ADC0CH12_AFIO_PIN, AFIO_FUN_ADC0);
195 break;
196 case 13:
197 AFIO_GPxConfig(HTCFG_ADC0CH13_GPIO_ID, HTCFG_ADC0CH13_AFIO_PIN, AFIO_FUN_ADC0);
198 break;
199 case 14:
200 AFIO_GPxConfig(HTCFG_ADC0CH14_GPIO_ID, HTCFG_ADC0CH14_AFIO_PIN, AFIO_FUN_ADC0);
201 break;
202 case 15:
203 AFIO_GPxConfig(HTCFG_ADC0CH15_GPIO_ID, HTCFG_ADC0CH15_AFIO_PIN, AFIO_FUN_ADC0);
204 break;
205 default:
206 break;
207 }
208 }
209 #endif
210 #ifdef BSP_USING_ADC1
211 if (HT_ADC1 == adc_x)
212 {
213 /* Enable peripheral clock */
214 CKCUClock.Bit.AFIO = 1;
215 CKCUClock.Bit.ADC1 = 1;
216 CKCU_PeripClockConfig(CKCUClock, ENABLE);
217
218 /* Configure AFIO mode as ADC function */
219 switch(channel)
220 {
221 case 0:
222 AFIO_GPxConfig(HTCFG_ADC1CH0_GPIO_ID, HTCFG_ADC1CH0_AFIO_PIN, AFIO_FUN_ADC0);
223 break;
224 case 1:
225 AFIO_GPxConfig(HTCFG_ADC1CH1_GPIO_ID, HTCFG_ADC1CH1_AFIO_PIN, AFIO_FUN_ADC0);
226 break;
227 case 2:
228 AFIO_GPxConfig(HTCFG_ADC1CH2_GPIO_ID, HTCFG_ADC1CH2_AFIO_PIN, AFIO_FUN_ADC0);
229 break;
230 case 3:
231 AFIO_GPxConfig(HTCFG_ADC1CH3_GPIO_ID, HTCFG_ADC1CH3_AFIO_PIN, AFIO_FUN_ADC0);
232 break;
233 case 4:
234 AFIO_GPxConfig(HTCFG_ADC1CH4_GPIO_ID, HTCFG_ADC1CH4_AFIO_PIN, AFIO_FUN_ADC0);
235 break;
236 case 5:
237 AFIO_GPxConfig(HTCFG_ADC1CH5_GPIO_ID, HTCFG_ADC1CH5_AFIO_PIN, AFIO_FUN_ADC0);
238 break;
239 case 6:
240 AFIO_GPxConfig(HTCFG_ADC1CH6_GPIO_ID, HTCFG_ADC1CH6_AFIO_PIN, AFIO_FUN_ADC0);
241 break;
242 case 7:
243 AFIO_GPxConfig(HTCFG_ADC1CH7_GPIO_ID, HTCFG_ADC1CH7_AFIO_PIN, AFIO_FUN_ADC0);
244 break;
245 default:
246 break;
247 }
248 }
249 #endif
250 }
251 #endif
252