1 /* 2 * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd. 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Change Logs: 7 * Date Author Notes 8 * 2022-04-28 CDT first version 9 */ 10 11 #ifndef __UART_CONFIG_H__ 12 #define __UART_CONFIG_H__ 13 14 #include <rtthread.h> 15 #include "irq_config.h" 16 17 #ifdef __cplusplus 18 extern "C" { 19 #endif 20 21 22 #if defined(BSP_USING_UART1) 23 #ifndef UART1_CONFIG 24 #define UART1_CONFIG \ 25 { \ 26 .name = "uart1", \ 27 .Instance = CM_USART1, \ 28 .clock = FCG1_PERIPH_USART1, \ 29 .rxerr_irq.irq_config = \ 30 { \ 31 .irq_num = BSP_UART1_RXERR_IRQ_NUM, \ 32 .irq_prio = BSP_UART1_RXERR_IRQ_PRIO, \ 33 .int_src = INT_SRC_USART1_EI, \ 34 }, \ 35 .rx_irq.irq_config = \ 36 { \ 37 .irq_num = BSP_UART1_RX_IRQ_NUM, \ 38 .irq_prio = BSP_UART1_RX_IRQ_PRIO, \ 39 .int_src = INT_SRC_USART1_RI, \ 40 }, \ 41 .tx_irq.irq_config = \ 42 { \ 43 .irq_num = BSP_UART1_TX_IRQ_NUM, \ 44 .irq_prio = BSP_UART1_TX_IRQ_PRIO, \ 45 .int_src = INT_SRC_USART1_TI, \ 46 }, \ 47 } 48 #endif /* UART1_CONFIG */ 49 50 #if defined(BSP_UART1_RX_USING_DMA) 51 #ifndef UART1_DMA_RX_CONFIG 52 #define UART1_DMA_RX_CONFIG \ 53 { \ 54 .Instance = UART1_RX_DMA_INSTANCE, \ 55 .channel = UART1_RX_DMA_CHANNEL, \ 56 .clock = UART1_RX_DMA_CLOCK, \ 57 .trigger_select = UART1_RX_DMA_TRIG_SELECT, \ 58 .trigger_event = EVT_SRC_USART1_RI, \ 59 .flag = UART1_RX_DMA_TRANS_FLAG, \ 60 .irq_config = \ 61 { \ 62 .irq_num = UART1_RX_DMA_IRQn, \ 63 .irq_prio = UART1_RX_DMA_INT_PRIO, \ 64 .int_src = UART1_RX_DMA_INT_SRC, \ 65 }, \ 66 } 67 #endif /* UART1_DMA_RX_CONFIG */ 68 69 #ifndef UART1_RXTO_CONFIG 70 #define UART1_RXTO_CONFIG \ 71 { \ 72 .TMR0_Instance = CM_TMR0_1, \ 73 .channel = TMR0_CH_A, \ 74 .clock = FCG2_PERIPH_TMR0_1, \ 75 .timeout_bits = 20UL, \ 76 .irq_config = \ 77 { \ 78 .irq_num = BSP_UART1_RXTO_IRQ_NUM, \ 79 .irq_prio = BSP_UART1_RXTO_IRQ_PRIO, \ 80 .int_src = INT_SRC_USART1_RTO, \ 81 }, \ 82 } 83 #endif /* UART1_RXTO_CONFIG */ 84 #endif /* BSP_UART1_RX_USING_DMA */ 85 86 #if defined(RT_USING_SERIAL_V1) && defined(BSP_UART1_TX_USING_DMA) 87 #ifndef UART1_TX_CPLT_CONFIG 88 #define UART1_TX_CPLT_CONFIG \ 89 { \ 90 .irq_config = \ 91 { \ 92 .irq_num = BSP_UART1_TX_CPLT_IRQ_NUM, \ 93 .irq_prio = BSP_UART1_TX_CPLT_IRQ_PRIO, \ 94 .int_src = INT_SRC_USART1_TCI, \ 95 }, \ 96 } 97 #endif 98 #elif defined(RT_USING_SERIAL_V2) 99 #ifndef UART1_TX_CPLT_CONFIG 100 #define UART1_TX_CPLT_CONFIG \ 101 { \ 102 .irq_config = \ 103 { \ 104 .irq_num = BSP_UART1_TX_CPLT_IRQ_NUM, \ 105 .irq_prio = BSP_UART1_TX_CPLT_IRQ_PRIO, \ 106 .int_src = INT_SRC_USART1_TCI, \ 107 }, \ 108 } 109 #endif 110 #endif /* UART1_TX_CPLT_CONFIG */ 111 112 #if defined(BSP_UART1_TX_USING_DMA) 113 #ifndef UART1_DMA_TX_CONFIG 114 #define UART1_DMA_TX_CONFIG \ 115 { \ 116 .Instance = UART1_TX_DMA_INSTANCE, \ 117 .channel = UART1_TX_DMA_CHANNEL, \ 118 .clock = UART1_TX_DMA_CLOCK, \ 119 .trigger_select = UART1_TX_DMA_TRIG_SELECT, \ 120 .trigger_event = EVT_SRC_USART1_TI, \ 121 .flag = UART1_TX_DMA_TRANS_FLAG, \ 122 .irq_config = \ 123 { \ 124 .irq_num = UART1_TX_DMA_IRQn, \ 125 .irq_prio = UART1_TX_DMA_INT_PRIO, \ 126 .int_src = UART1_TX_DMA_INT_SRC, \ 127 }, \ 128 } 129 #endif /* UART1_DMA_TX_CONFIG */ 130 #endif /* BSP_UART1_TX_USING_DMA */ 131 #endif /* BSP_USING_UART1 */ 132 133 #if defined(BSP_USING_UART2) 134 #ifndef UART2_CONFIG 135 #define UART2_CONFIG \ 136 { \ 137 .name = "uart2", \ 138 .Instance = CM_USART2, \ 139 .clock = FCG1_PERIPH_USART2, \ 140 .rxerr_irq.irq_config = \ 141 { \ 142 .irq_num = BSP_UART2_RXERR_IRQ_NUM, \ 143 .irq_prio = BSP_UART2_RXERR_IRQ_PRIO, \ 144 .int_src = INT_SRC_USART2_EI, \ 145 }, \ 146 .rx_irq.irq_config = \ 147 { \ 148 .irq_num = BSP_UART2_RX_IRQ_NUM, \ 149 .irq_prio = BSP_UART2_RX_IRQ_PRIO, \ 150 .int_src = INT_SRC_USART2_RI, \ 151 }, \ 152 .tx_irq.irq_config = \ 153 { \ 154 .irq_num = BSP_UART2_TX_IRQ_NUM, \ 155 .irq_prio = BSP_UART2_TX_IRQ_PRIO, \ 156 .int_src = INT_SRC_USART2_TI, \ 157 }, \ 158 } 159 #endif /* UART2_CONFIG */ 160 161 #if defined(BSP_UART2_RX_USING_DMA) 162 #ifndef UART2_DMA_RX_CONFIG 163 #define UART2_DMA_RX_CONFIG \ 164 { \ 165 .Instance = UART2_RX_DMA_INSTANCE, \ 166 .channel = UART2_RX_DMA_CHANNEL, \ 167 .clock = UART2_RX_DMA_CLOCK, \ 168 .trigger_select = UART2_RX_DMA_TRIG_SELECT, \ 169 .trigger_event = EVT_SRC_USART2_RI, \ 170 .flag = UART2_RX_DMA_TRANS_FLAG, \ 171 .irq_config = \ 172 { \ 173 .irq_num = UART2_RX_DMA_IRQn, \ 174 .irq_prio = UART2_RX_DMA_INT_PRIO, \ 175 .int_src = UART2_RX_DMA_INT_SRC, \ 176 }, \ 177 } 178 #endif /* UART2_DMA_RX_CONFIG */ 179 180 #ifndef UART2_RXTO_CONFIG 181 #define UART2_RXTO_CONFIG \ 182 { \ 183 .TMR0_Instance = CM_TMR0_1, \ 184 .channel = TMR0_CH_B, \ 185 .clock = FCG2_PERIPH_TMR0_1, \ 186 .timeout_bits = 20UL, \ 187 .irq_config = \ 188 { \ 189 .irq_num = BSP_UART2_RXTO_IRQ_NUM, \ 190 .irq_prio = BSP_UART2_RXTO_IRQ_PRIO, \ 191 .int_src = INT_SRC_USART2_RTO, \ 192 }, \ 193 } 194 #endif /* UART2_RXTO_CONFIG */ 195 #endif /* BSP_UART2_RX_USING_DMA */ 196 197 #if defined(RT_USING_SERIAL_V1) && defined(BSP_UART2_TX_USING_DMA) 198 #ifndef UART2_TX_CPLT_CONFIG 199 #define UART2_TX_CPLT_CONFIG \ 200 { \ 201 .irq_config = \ 202 { \ 203 .irq_num = BSP_UART2_TX_CPLT_IRQ_NUM, \ 204 .irq_prio = BSP_UART2_TX_CPLT_IRQ_PRIO, \ 205 .int_src = INT_SRC_USART2_TCI, \ 206 }, \ 207 } 208 #endif 209 #elif defined(RT_USING_SERIAL_V2) 210 #ifndef UART2_TX_CPLT_CONFIG 211 #define UART2_TX_CPLT_CONFIG \ 212 { \ 213 .irq_config = \ 214 { \ 215 .irq_num = BSP_UART2_TX_CPLT_IRQ_NUM, \ 216 .irq_prio = BSP_UART2_TX_CPLT_IRQ_PRIO, \ 217 .int_src = INT_SRC_USART2_TCI, \ 218 }, \ 219 } 220 #endif 221 #endif /* UART2_TX_CPLT_CONFIG */ 222 223 #if defined(BSP_UART2_TX_USING_DMA) 224 #ifndef UART2_DMA_TX_CONFIG 225 #define UART2_DMA_TX_CONFIG \ 226 { \ 227 .Instance = UART2_TX_DMA_INSTANCE, \ 228 .channel = UART2_TX_DMA_CHANNEL, \ 229 .clock = UART2_TX_DMA_CLOCK, \ 230 .trigger_select = UART2_TX_DMA_TRIG_SELECT, \ 231 .trigger_event = EVT_SRC_USART2_TI, \ 232 .flag = UART2_TX_DMA_TRANS_FLAG, \ 233 .irq_config = \ 234 { \ 235 .irq_num = UART2_TX_DMA_IRQn, \ 236 .irq_prio = UART2_TX_DMA_INT_PRIO, \ 237 .int_src = UART2_TX_DMA_INT_SRC, \ 238 }, \ 239 } 240 #endif /* UART2_DMA_TX_CONFIG */ 241 #endif /* BSP_UART2_TX_USING_DMA */ 242 #endif /* BSP_USING_UART2 */ 243 244 #if defined(BSP_USING_UART3) 245 #ifndef UART3_CONFIG 246 #define UART3_CONFIG \ 247 { \ 248 .name = "uart3", \ 249 .Instance = CM_USART3, \ 250 .clock = FCG1_PERIPH_USART3, \ 251 .rxerr_irq.irq_config = \ 252 { \ 253 .irq_num = BSP_UART3_RXERR_IRQ_NUM, \ 254 .irq_prio = BSP_UART3_RXERR_IRQ_PRIO, \ 255 .int_src = INT_SRC_USART3_EI, \ 256 }, \ 257 .rx_irq.irq_config = \ 258 { \ 259 .irq_num = BSP_UART3_RX_IRQ_NUM, \ 260 .irq_prio = BSP_UART3_RX_IRQ_PRIO, \ 261 .int_src = INT_SRC_USART3_RI, \ 262 }, \ 263 .tx_irq.irq_config = \ 264 { \ 265 .irq_num = BSP_UART3_TX_IRQ_NUM, \ 266 .irq_prio = BSP_UART3_TX_IRQ_PRIO, \ 267 .int_src = INT_SRC_USART3_TI, \ 268 }, \ 269 } 270 #endif /* UART3_CONFIG */ 271 272 #if defined(BSP_UART3_RX_USING_DMA) 273 #ifndef UART3_DMA_RX_CONFIG 274 #define UART3_DMA_RX_CONFIG \ 275 { \ 276 .Instance = UART3_RX_DMA_INSTANCE, \ 277 .channel = UART3_RX_DMA_CHANNEL, \ 278 .clock = UART3_RX_DMA_CLOCK, \ 279 .trigger_select = UART3_RX_DMA_TRIG_SELECT, \ 280 .trigger_event = EVT_SRC_USART3_RI, \ 281 .flag = UART3_RX_DMA_TRANS_FLAG, \ 282 .irq_config = \ 283 { \ 284 .irq_num = UART3_RX_DMA_IRQn, \ 285 .irq_prio = UART3_RX_DMA_INT_PRIO, \ 286 .int_src = UART3_RX_DMA_INT_SRC, \ 287 }, \ 288 } 289 #endif /* UART3_DMA_RX_CONFIG */ 290 291 #ifndef UART3_RXTO_CONFIG 292 #define UART3_RXTO_CONFIG \ 293 { \ 294 .TMR0_Instance = CM_TMR0_2, \ 295 .channel = TMR0_CH_A, \ 296 .clock = FCG2_PERIPH_TMR0_2, \ 297 .timeout_bits = 20UL, \ 298 .irq_config = \ 299 { \ 300 .irq_num = BSP_UART3_RXTO_IRQ_NUM, \ 301 .irq_prio = BSP_UART3_RXTO_IRQ_PRIO, \ 302 .int_src = INT_SRC_USART3_RTO, \ 303 }, \ 304 } 305 #endif /* UART3_RXTO_CONFIG */ 306 #endif /* BSP_UART3_RX_USING_DMA */ 307 308 #if defined(RT_USING_SERIAL_V1) && defined(BSP_UART3_TX_USING_DMA) 309 #ifndef UART3_TX_CPLT_CONFIG 310 #define UART3_TX_CPLT_CONFIG \ 311 { \ 312 .irq_config = \ 313 { \ 314 .irq_num = BSP_UART3_TX_CPLT_IRQ_NUM, \ 315 .irq_prio = BSP_UART3_TX_CPLT_IRQ_PRIO, \ 316 .int_src = INT_SRC_USART3_TCI, \ 317 }, \ 318 } 319 #endif 320 #elif defined(RT_USING_SERIAL_V2) 321 #ifndef UART3_TX_CPLT_CONFIG 322 #define UART3_TX_CPLT_CONFIG \ 323 { \ 324 .irq_config = \ 325 { \ 326 .irq_num = BSP_UART3_TX_CPLT_IRQ_NUM, \ 327 .irq_prio = BSP_UART3_TX_CPLT_IRQ_PRIO, \ 328 .int_src = INT_SRC_USART3_TCI, \ 329 }, \ 330 } 331 #endif 332 #endif /* UART3_TX_CPLT_CONFIG */ 333 334 #if defined(BSP_UART3_TX_USING_DMA) 335 #ifndef UART3_DMA_TX_CONFIG 336 #define UART3_DMA_TX_CONFIG \ 337 { \ 338 .Instance = UART3_TX_DMA_INSTANCE, \ 339 .channel = UART3_TX_DMA_CHANNEL, \ 340 .clock = UART3_TX_DMA_CLOCK, \ 341 .trigger_select = UART3_TX_DMA_TRIG_SELECT, \ 342 .trigger_event = EVT_SRC_USART3_TI, \ 343 .flag = UART3_TX_DMA_TRANS_FLAG, \ 344 .irq_config = \ 345 { \ 346 .irq_num = UART3_TX_DMA_IRQn, \ 347 .irq_prio = UART3_TX_DMA_INT_PRIO, \ 348 .int_src = UART3_TX_DMA_INT_SRC, \ 349 }, \ 350 } 351 #endif /* UART3_DMA_TX_CONFIG */ 352 #endif /* BSP_UART3_TX_USING_DMA */ 353 #endif /* BSP_USING_UART3 */ 354 355 #if defined(BSP_USING_UART4) 356 #ifndef UART4_CONFIG 357 #define UART4_CONFIG \ 358 { \ 359 .name = "uart4", \ 360 .Instance = CM_USART4, \ 361 .clock = FCG1_PERIPH_USART4, \ 362 .rxerr_irq.irq_config = \ 363 { \ 364 .irq_num = BSP_UART4_RXERR_IRQ_NUM, \ 365 .irq_prio = BSP_UART4_RXERR_IRQ_PRIO, \ 366 .int_src = INT_SRC_USART4_EI, \ 367 }, \ 368 .rx_irq.irq_config = \ 369 { \ 370 .irq_num = BSP_UART4_RX_IRQ_NUM, \ 371 .irq_prio = BSP_UART4_RX_IRQ_PRIO, \ 372 .int_src = INT_SRC_USART4_RI, \ 373 }, \ 374 .tx_irq.irq_config = \ 375 { \ 376 .irq_num = BSP_UART4_TX_IRQ_NUM, \ 377 .irq_prio = BSP_UART4_TX_IRQ_PRIO, \ 378 .int_src = INT_SRC_USART4_TI, \ 379 }, \ 380 } 381 #endif /* UART4_CONFIG */ 382 383 #if defined(BSP_UART4_RX_USING_DMA) 384 #ifndef UART4_DMA_RX_CONFIG 385 #define UART4_DMA_RX_CONFIG \ 386 { \ 387 .Instance = UART4_RX_DMA_INSTANCE, \ 388 .channel = UART4_RX_DMA_CHANNEL, \ 389 .clock = UART4_RX_DMA_CLOCK, \ 390 .trigger_select = UART4_RX_DMA_TRIG_SELECT, \ 391 .trigger_event = EVT_SRC_USART4_RI, \ 392 .flag = UART4_RX_DMA_TRANS_FLAG, \ 393 .irq_config = \ 394 { \ 395 .irq_num = UART4_RX_DMA_IRQn, \ 396 .irq_prio = UART4_RX_DMA_INT_PRIO, \ 397 .int_src = UART4_RX_DMA_INT_SRC, \ 398 }, \ 399 } 400 #endif /* UART4_DMA_RX_CONFIG */ 401 402 #ifndef UART4_RXTO_CONFIG 403 #define UART4_RXTO_CONFIG \ 404 { \ 405 .TMR0_Instance = CM_TMR0_2, \ 406 .channel = TMR0_CH_B, \ 407 .clock = FCG2_PERIPH_TMR0_2, \ 408 .timeout_bits = 20UL, \ 409 .irq_config = \ 410 { \ 411 .irq_num = BSP_UART4_RXTO_IRQ_NUM, \ 412 .irq_prio = BSP_UART4_RXTO_IRQ_PRIO, \ 413 .int_src = INT_SRC_USART4_RTO, \ 414 }, \ 415 } 416 #endif /* UART4_RXTO_CONFIG */ 417 #endif /* BSP_UART4_RX_USING_DMA */ 418 419 #if defined(RT_USING_SERIAL_V1) && defined(BSP_UART4_TX_USING_DMA) 420 #ifndef UART4_TX_CPLT_CONFIG 421 #define UART4_TX_CPLT_CONFIG \ 422 { \ 423 .irq_config = \ 424 { \ 425 .irq_num = BSP_UART4_TX_CPLT_IRQ_NUM, \ 426 .irq_prio = BSP_UART4_TX_CPLT_IRQ_PRIO, \ 427 .int_src = INT_SRC_USART4_TCI, \ 428 }, \ 429 } 430 #endif 431 #elif defined(RT_USING_SERIAL_V2) 432 #ifndef UART4_TX_CPLT_CONFIG 433 #define UART4_TX_CPLT_CONFIG \ 434 { \ 435 .irq_config = \ 436 { \ 437 .irq_num = BSP_UART4_TX_CPLT_IRQ_NUM, \ 438 .irq_prio = BSP_UART4_TX_CPLT_IRQ_PRIO, \ 439 .int_src = INT_SRC_USART4_TCI, \ 440 }, \ 441 } 442 #endif 443 #endif /* UART4_TX_CPLT_CONFIG */ 444 445 #if defined(BSP_UART4_TX_USING_DMA) 446 #ifndef UART4_DMA_TX_CONFIG 447 #define UART4_DMA_TX_CONFIG \ 448 { \ 449 .Instance = UART4_TX_DMA_INSTANCE, \ 450 .channel = UART4_TX_DMA_CHANNEL, \ 451 .clock = UART4_TX_DMA_CLOCK, \ 452 .trigger_select = UART4_TX_DMA_TRIG_SELECT, \ 453 .trigger_event = EVT_SRC_USART4_TI, \ 454 .flag = UART4_TX_DMA_TRANS_FLAG, \ 455 .irq_config = \ 456 { \ 457 .irq_num = UART4_TX_DMA_IRQn, \ 458 .irq_prio = UART4_TX_DMA_INT_PRIO, \ 459 .int_src = UART4_TX_DMA_INT_SRC, \ 460 }, \ 461 } 462 #endif /* UART4_DMA_TX_CONFIG */ 463 #endif /* BSP_UART4_TX_USING_DMA */ 464 #endif /* BSP_USING_UART4 */ 465 466 #ifdef __cplusplus 467 } 468 #endif 469 470 #endif 471