* 初始化指定的串口模块 * @uart_info_p 串口模块信息 */
| 107 | * @uart_info_p 串口模块信息 |
| 108 | */ |
| 109 | void uart_init(ls1c_uart_info_t *uart_info_p) |
| 110 | { |
| 111 | void *uart_base = uart_get_base(uart_info_p->UARTx); |
| 112 | unsigned long baudrate_div = 0; |
| 113 | |
| 114 | // 禁止所有中断 |
| 115 | reg_write_8(0, uart_base + LS1C_UART_IER_OFFSET); |
| 116 | |
| 117 | // 接收FIFO的中断申请Trigger为14字节,清空发送和接收FIFO,并复位 |
| 118 | reg_write_8(0xc3, uart_base + LS1C_UART_FCR_OFFSET); |
| 119 | |
| 120 | // 设置波特率 |
| 121 | reg_write_8(0x80, uart_base + LS1C_UART_LCR_OFFSET); |
| 122 | baudrate_div = clk_get_cpu_rate() / 16 / uart_info_p->baudrate / 2; |
| 123 | reg_write_8((baudrate_div >> 8) & 0xff, uart_base + LS1C_UART_MSB_OFFSET); |
| 124 | reg_write_8(baudrate_div & 0xff, uart_base + LS1C_UART_LSB_OFFSET); |
| 125 | |
| 126 | // 8个数据位,1个停止位,无校验 |
| 127 | reg_write_8(0x03, uart_base + LS1C_UART_LCR_OFFSET); |
| 128 | |
| 129 | // 使能接收中断 |
| 130 | if (TRUE == uart_info_p->rx_enable) |
| 131 | { |
| 132 | reg_write_8(IER_IRxE|IER_ILE , uart_base + LS1C_UART_IER_OFFSET); |
| 133 | } |
| 134 | |
| 135 | return ; |
| 136 | } |
| 137 | |
| 138 | |
| 139 | /* |
no test coverage detected