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 * 2024-08-30 shelton first version
9 */
10
11 #include <rtthread.h>
12 #include "at32m412_416.h"
13 #include "at32_msp.h"
14
15 #ifdef BSP_USING_UART
at32_msp_usart_init(void * instance)16 void at32_msp_usart_init(void *instance)
17 {
18 gpio_init_type gpio_init_struct;
19 usart_type *usart_x = (usart_type *)instance;
20
21 gpio_default_para_init(&gpio_init_struct);
22 gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
23 #ifdef BSP_USING_UART1
24 if(USART1 == usart_x)
25 {
26 crm_periph_clock_enable(CRM_USART1_PERIPH_CLOCK, TRUE);
27 crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
28
29 gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
30 gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
31 gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
32 gpio_init_struct.gpio_pins = GPIO_PINS_9;
33 gpio_init(GPIOA, &gpio_init_struct);
34
35 gpio_init_struct.gpio_pins = GPIO_PINS_10;
36 gpio_init(GPIOA, &gpio_init_struct);
37
38 gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE9, GPIO_MUX_7);
39 gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE10, GPIO_MUX_7);
40 }
41 #endif
42 #ifdef BSP_USING_UART2
43 if(USART2 == usart_x)
44 {
45 crm_periph_clock_enable(CRM_USART2_PERIPH_CLOCK, TRUE);
46 crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
47
48 gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
49 gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
50 gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
51 gpio_init_struct.gpio_pins = GPIO_PINS_2;
52 gpio_init(GPIOA, &gpio_init_struct);
53
54 gpio_init_struct.gpio_pins = GPIO_PINS_3;
55 gpio_init(GPIOA, &gpio_init_struct);
56
57 gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE2, GPIO_MUX_7);
58 gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE3, GPIO_MUX_7);
59 }
60 #endif
61 /* add others */
62 }
63 #endif /* BSP_USING_SERIAL */
64
65 #ifdef BSP_USING_SPI
at32_msp_spi_init(void * instance)66 void at32_msp_spi_init(void *instance)
67 {
68 gpio_init_type gpio_init_struct;
69 spi_type *spi_x = (spi_type *)instance;
70
71 gpio_default_para_init(&gpio_init_struct);
72 gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
73 #ifdef BSP_USING_SPI1
74 if(SPI1 == spi_x)
75 {
76 crm_periph_clock_enable(CRM_SPI1_PERIPH_CLOCK, TRUE);
77 crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
78
79 gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
80 gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
81 gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
82 gpio_init_struct.gpio_pins = GPIO_PINS_4;
83 gpio_init(GPIOA, &gpio_init_struct);
84
85 gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
86 gpio_init_struct.gpio_pins = GPIO_PINS_5 | GPIO_PINS_6 | GPIO_PINS_7;
87 gpio_init(GPIOA, &gpio_init_struct);
88
89 gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE5, GPIO_MUX_5);
90 gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE6, GPIO_MUX_5);
91 gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE7, GPIO_MUX_5);
92 }
93 #endif
94 #ifdef BSP_USING_SPI2
95 if(SPI2 == spi_x)
96 {
97 crm_periph_clock_enable(CRM_SPI2_PERIPH_CLOCK, TRUE);
98 crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
99
100 gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
101 gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
102 gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
103 gpio_init_struct.gpio_pins = GPIO_PINS_12;
104 gpio_init(GPIOB, &gpio_init_struct);
105
106 gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
107 gpio_init_struct.gpio_pins = GPIO_PINS_13 | GPIO_PINS_14 | GPIO_PINS_15;
108 gpio_init(GPIOB, &gpio_init_struct);
109
110 gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE13, GPIO_MUX_5);
111 gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE14, GPIO_MUX_5);
112 gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE15, GPIO_MUX_5);
113 }
114 #endif
115 /* add others */
116 }
117 #endif /* BSP_USING_SPI */
118
119 #ifdef BSP_USING_HARD_I2C
at32_msp_i2c_init(void * instance)120 void at32_msp_i2c_init(void *instance)
121 {
122 gpio_init_type gpio_init_struct;
123 i2c_type *i2c_x = (i2c_type *)instance;
124
125 gpio_default_para_init(&gpio_init_struct);
126 gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
127 #ifdef BSP_USING_HARD_I2C1
128 if(I2C1 == i2c_x)
129 {
130 crm_periph_clock_enable(CRM_I2C1_PERIPH_CLOCK, TRUE);
131 crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
132
133 gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
134 gpio_init_struct.gpio_out_type = GPIO_OUTPUT_OPEN_DRAIN;
135 gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
136 gpio_init_struct.gpio_pins = GPIO_PINS_6 | GPIO_PINS_7;
137 gpio_init(GPIOB, &gpio_init_struct);
138
139 gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE6, GPIO_MUX_4);
140 gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE7, GPIO_MUX_4);
141 }
142 #endif
143 #ifdef BSP_USING_HARD_I2C2
144 if(I2C2 == i2c_x)
145 {
146 crm_periph_clock_enable(CRM_I2C2_PERIPH_CLOCK, TRUE);
147 crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
148
149 gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
150 gpio_init_struct.gpio_out_type = GPIO_OUTPUT_OPEN_DRAIN;
151 gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
152 gpio_init_struct.gpio_pins = GPIO_PINS_10 | GPIO_PINS_11;
153 gpio_init(GPIOB, &gpio_init_struct);
154
155 gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE10, GPIO_MUX_4);
156 gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE11, GPIO_MUX_4);
157 }
158 #endif
159 /* add others */
160 }
161 #endif /* BSP_USING_HARD_I2C */
162
163 #ifdef BSP_USING_PWM
at32_msp_tmr_init(void * instance)164 void at32_msp_tmr_init(void *instance)
165 {
166 gpio_init_type gpio_init_struct;
167 tmr_type *tmr_x = (tmr_type *)instance;
168
169 gpio_default_para_init(&gpio_init_struct);
170 gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
171 if(tmr_x == TMR1)
172 {
173 crm_periph_clock_enable(CRM_TMR1_PERIPH_CLOCK, TRUE);
174 crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
175
176 gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
177 gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
178 gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
179 gpio_init_struct.gpio_pins = GPIO_PINS_8 | GPIO_PINS_11;
180 gpio_init(GPIOA, &gpio_init_struct);
181
182 gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE8, GPIO_MUX_1);
183 gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE11, GPIO_MUX_1);
184 }
185 /* add others */
186 }
187 #endif /* BSP_USING_PWM */
188
189 #ifdef BSP_USING_ADC
at32_msp_adc_init(void * instance)190 void at32_msp_adc_init(void *instance)
191 {
192 gpio_init_type gpio_init_struct;
193 adc_type *adc_x = (adc_type *)instance;
194
195 gpio_default_para_init(&gpio_init_struct);
196 gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
197 #ifdef BSP_USING_ADC1
198 if(adc_x == ADC1)
199 {
200 crm_periph_clock_enable(CRM_ADC1_PERIPH_CLOCK, TRUE);
201 crm_periph_clock_enable(CRM_GPIOF_PERIPH_CLOCK, TRUE);
202
203 gpio_init_struct.gpio_pins = GPIO_PINS_10 | GPIO_PINS_12;
204 gpio_init_struct.gpio_mode = GPIO_MODE_ANALOG;
205 gpio_init(GPIOF, &gpio_init_struct);
206 }
207 #endif
208 }
209 #endif /* BSP_USING_ADC */
210
211 #ifdef BSP_USING_HWTIMER
at32_msp_hwtmr_init(void * instance)212 void at32_msp_hwtmr_init(void *instance)
213 {
214 tmr_type *tmr_x = (tmr_type *)instance;
215
216 #ifdef BSP_USING_HWTMR3
217 if(tmr_x == TMR3)
218 {
219 crm_periph_clock_enable(CRM_TMR3_PERIPH_CLOCK, TRUE);
220 }
221 #endif
222 }
223 #endif
224
225 #ifdef BSP_USING_CAN_V2
at32_msp_can_init(void * instance)226 void at32_msp_can_init(void *instance)
227 {
228 gpio_init_type gpio_init_struct;
229 can_type *can_x = (can_type *)instance;
230
231 gpio_default_para_init(&gpio_init_struct);
232 gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
233 #ifdef BSP_USING_CAN1
234 if(can_x == CAN1)
235 {
236 crm_periph_clock_enable(CRM_CAN1_PERIPH_CLOCK, TRUE);
237 crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
238 crm_can_clock_select(CRM_CAN1, CRM_CAN_CLOCK_SOURCE_PCLK);
239
240 gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
241 gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
242 gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
243 gpio_init_struct.gpio_pins = GPIO_PINS_8 | GPIO_PINS_9;
244 gpio_init(GPIOB, &gpio_init_struct);
245
246 gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE8, GPIO_MUX_9);
247 gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE9, GPIO_MUX_9);
248 }
249 #endif
250 }
251 #endif /* BSP_USING_CAN_V2 */
252
253 #ifdef BSP_USING_DAC
at32_msp_dac_init(void * instance)254 void at32_msp_dac_init(void *instance)
255 {
256 gpio_init_type gpio_init_struct;
257 dac_type *dac_x = (dac_type *)instance;
258
259 gpio_default_para_init(&gpio_init_struct);
260 gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
261 #ifdef BSP_USING_DAC1
262 if(dac_x == DAC)
263 {
264 crm_periph_clock_enable(CRM_DAC_PERIPH_CLOCK, TRUE);
265 crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
266
267 gpio_init_struct.gpio_pins = GPIO_PINS_4 | GPIO_PINS_5;
268 gpio_init_struct.gpio_mode = GPIO_MODE_ANALOG;
269 gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
270 gpio_init(GPIOA, &gpio_init_struct);
271 }
272 #endif
273 }
274 #endif /* BSP_USING_DAC */
275