embox

Форк
0
/
uart_setup_hw_board_config.inc 
314 строк · 5.1 Кб
1
#include <config/board_config.h>
2

3
#include <drivers/gpio/gpio.h>
4

5
extern int clk_enable(char *clk_name);
6

7
static inline int uart_nr_by_addr(uintptr_t base_addr) {
8
	int num;
9

10
	switch (base_addr) {
11
#if defined CONF_UART0_ENABLED
12
	case CONF_UART0_REGION_BASE_ADDR:
13
		num = 0;
14
		break;
15
#endif
16
#if defined CONF_UART1_ENABLED
17
	case CONF_UART1_REGION_BASE_ADDR:
18
		num = 1;
19
		break;
20
#endif
21
#if defined CONF_UART2_ENABLED
22
	case CONF_UART2_REGION_BASE_ADDR:
23
		num = 2;
24
		break;
25
#endif
26
#if defined CONF_UART3_ENABLED
27
	case CONF_UART3_REGION_BASE_ADDR:
28
		num = 3;
29
		break;
30
#endif
31
#if defined CONF_UART4_ENABLED
32
	case CONF_UART4_REGION_BASE_ADDR:
33
		num = 4;
34
		break;
35
#endif
36
	default:
37
		return -1;
38
	}
39
	return num;
40
}
41

42
static inline int uart_get_tx_port(int num) {
43
	int port = -1;
44

45
	switch (num) {
46
#if defined CONF_UART0_PIN_TX_PORT
47
	case 0:
48
		port = CONF_UART0_PIN_TX_PORT;
49
		break;
50
#endif
51
#if defined CONF_UART1_PIN_TX_PORT
52
	case 1:
53
		port = CONF_UART1_PIN_TX_PORT;
54
		break;
55
#endif
56
#if defined CONF_UART2_PIN_TX_PORT
57
	case 2:
58
		port = CONF_UART2_PIN_TX_PORT;
59
		break;
60
#endif
61
#if defined CONF_UART3_PIN_TX_PORT
62
	case 3:
63
		port = CONF_UART3_PIN_TX_PORT;
64
		break;
65
#endif
66
#if defined CONF_UART4_PIN_TX_PORT
67
	case 4:
68
		port = CONF_UART4_PIN_TX_PORT;
69
		break;
70
#endif
71
	default:
72
		port = -1;
73
	}
74

75
	return port;
76
}
77

78
static inline int uart_get_tx_pin(int num) {
79
	int pin = -1;
80

81
	switch (num) {
82
#if defined CONF_UART0_PIN_TX_NR
83
	case 0:
84
		pin = CONF_UART0_PIN_TX_NR;
85
		break;
86
#endif
87
#if defined CONF_UART1_PIN_TX_NR
88
	case 1:
89
		pin = CONF_UART1_PIN_TX_NR;
90
		break;
91
#endif
92
#if defined CONF_UART2_PIN_TX_NR
93
	case 2:
94
		pin = CONF_UART2_PIN_TX_NR;
95
		break;
96
#endif
97
#if defined CONF_UART3_PIN_TX_NR
98
	case 3:
99
		pin = CONF_UART3_PIN_TX_NR;
100
		break;
101
#endif
102
#if defined CONF_UART4_PIN_TX_NR
103
	case 4:
104
		pin = CONF_UART4_PIN_TX_NR;
105
		break;
106
#endif
107
	default:
108
		pin = -1;
109
	}
110

111
	return pin;
112
}
113

114
static inline int uart_get_tx_alt(int num) {
115
	int alt = -1;
116

117
	switch (num) {
118
#if defined CONF_UART0_PIN_TX_AF
119
	case 0:
120
		alt = CONF_UART0_PIN_TX_AF;
121
		break;
122
#endif
123
#if defined CONF_UART1_PIN_TX_AF
124
	case 1:
125
		alt = CONF_UART1_PIN_TX_AF;
126
		break;
127
#endif
128
#if defined CONF_UART2_PIN_TX_AF
129
	case 2:
130
		alt = CONF_UART2_PIN_TX_AF;
131
		break;
132
#endif
133
#if defined CONF_UART3_PIN_TX_AF
134
	case 3:
135
		alt = CONF_UART3_PIN_TX_AF;
136
		break;
137
#endif
138
#if defined CONF_UART4_PIN_TX_NR
139
	case 4:
140
		alt = CONF_UART4_PIN_TX_NR;
141
		break;
142
#endif
143
	default:
144
		alt = -1;
145
	}
146

147
	return alt;
148
}
149

150
static inline int uart_get_rx_port(int num) {
151
	int port = -1;
152

153
	switch (num) {
154
#if defined CONF_UART0_PIN_RX_PORT
155
	case 0:
156
		port = CONF_UART0_PIN_RX_PORT;
157
		break;
158
#endif
159
#if defined CONF_UART1_PIN_RX_PORT
160
	case 1:
161
		port = CONF_UART1_PIN_RX_PORT;
162
		break;
163
#endif
164
#if defined CONF_UART2_PIN_RX_PORT
165
	case 2:
166
		port = CONF_UART2_PIN_RX_PORT;
167
		break;
168
#endif
169
#if defined CONF_UART3_PIN_RX_PORT
170
	case 3:
171
		port = CONF_UART3_PIN_RX_PORT;
172
		break;
173
#endif
174
#if defined CONF_UART4_PIN_RX_PORT
175
	case 4:
176
		port = CONF_UART4_PIN_RX_PORT;
177
		break;
178
#endif
179
	default:
180
		port = -1;
181
	}
182

183
	return port;
184
}
185

186
static inline int uart_get_rx_pin(int num) {
187
	int pin = -1;
188

189
	switch (num) {
190
#if defined CONF_UART0_PIN_RX_NR
191
	case 0:
192
		pin = CONF_UART0_PIN_RX_NR;
193
		break;
194
#endif
195
#if defined CONF_UART1_PIN_RX_NR
196
	case 1:
197
		pin = CONF_UART1_PIN_RX_NR;
198
		break;
199
#endif
200
#if defined CONF_UART2_PIN_RX_NR
201
	case 2:
202
		pin = CONF_UART2_PIN_RX_NR;
203
		break;
204
#endif
205
#if defined CONF_UART3_PIN_RX_NR
206
	case 3:
207
		pin = CONF_UART3_PIN_RX_NR;
208
		break;
209
#endif
210
#if defined CONF_UART4_PIN_RX_NR
211
	case 4:
212
		pin = CONF_UART4_PIN_RX_NR;
213
		break;
214
#endif
215
	default:
216
		pin = -1;
217
	}
218

219
	return pin;
220
}
221

222
static inline int uart_get_rx_alt(int num) {
223
	int alt = -1;
224

225
	switch (num) {
226
#if defined CONF_UART0_PIN_RX_AF
227
	case 0:
228
		alt = CONF_UART0_PIN_RX_AF;
229
		break;
230
#endif
231
#if defined CONF_UART1_PIN_RX_AF
232
	case 1:
233
		alt = CONF_UART1_PIN_RX_AF;
234
		break;
235
#endif
236
#if defined CONF_UART2_PIN_RX_AF
237
	case 2:
238
		alt = CONF_UART2_PIN_RX_AF;
239
		break;
240
#endif
241
#if defined CONF_UART3_PIN_RX_AF
242
	case 3:
243
		alt = CONF_UART3_PIN_RX_AF;
244
		break;
245
#endif
246
#if defined CONF_UART4_PIN_RX_NR
247
	case 4:
248
		alt = CONF_UART4_PIN_RX_NR;
249
		break;
250
#endif
251
	default:
252
		alt = -1;
253
	}
254

255
	return alt;
256
}
257

258
static inline void uart_set_pins(int num) {
259
	gpio_setup_mode(uart_get_tx_port(num),
260
			(1 << uart_get_tx_pin(num)),
261
			GPIO_MODE_OUT_ALTERNATE |
262
			GPIO_ALTERNATE(uart_get_tx_alt(num)));
263

264
	gpio_setup_mode(uart_get_rx_port(num),
265
			(1 << uart_get_rx_pin(num)),
266
			GPIO_MODE_OUT_ALTERNATE |
267
			GPIO_ALTERNATE(uart_get_tx_alt(num)));
268
}
269

270
static inline int uart_set_clk(int num) {
271
	char *clk_name;
272
	switch (num) {
273
#if defined CONF_UART0_CLK_ENABLE
274
		case 0:
275
		clk_name = CONF_UART0_CLK_ENABLE();
276
		break;
277
#endif
278
#if defined CONF_UART1_CLK_ENABLE
279
		case 1:
280
		clk_name = CONF_UART1_CLK_ENABLE();
281
		break;
282
#endif
283
#if defined CONF_UART2_CLK_ENABLE
284
		case 2:
285
		clk_name = CONF_UART2_CLK_ENABLE();
286
		break;
287
#endif
288
#if defined CONF_UART3_CLK_ENABLE
289
		case 3:
290
		clk_name = CONF_UART3_CLK_ENABLE();
291
		break;
292
#endif
293
#if defined CONF_UART4_CLK_ENABLE
294
		case 4:
295
		clk_name = CONF_UART4_CLK_ENABLE();
296
		break;
297
#endif
298
	default:
299
		return -1;
300
	}
301

302
	clk_enable(clk_name);
303

304
	return  0;
305
}
306

307
static inline int uart_setup_hw(struct uart *dev) {
308
	int uart_num = uart_nr_by_addr(dev->base_addr);
309

310
	uart_set_pins(uart_num);
311
	uart_set_clk(uart_num);
312

313
	return 0;
314
}
315

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.