[fix] re order uart init
This commit is contained in:
parent
0fcc8ac246
commit
2b780b6cf7
@ -56,6 +56,7 @@
|
||||
#define UART_FLAG_RI (1 << 8U)
|
||||
|
||||
struct uart_cfg_s {
|
||||
uint32_t baudrate;
|
||||
uint8_t mode;
|
||||
uint8_t data_bits;
|
||||
uint8_t parity;
|
||||
|
||||
@ -4,32 +4,7 @@ void uart_init(uint8_t uart_id, struct uart_cfg_s *cfg)
|
||||
{
|
||||
uint32_t addr, val;
|
||||
|
||||
addr = UART0_BASE + UART_UARTCR_OFFSET + (UART1_BASE - UART0_BASE) * uart_id;
|
||||
val = getreg32(addr);
|
||||
val &= ~UART_UARTCR_UARTEN;
|
||||
val &= ~UART_UARTCR_SIREN;
|
||||
val &= ~UART_UARTCR_SIRLP;
|
||||
val &= ~UART_UARTCR_LBE;
|
||||
val &= ~UART_UARTCR_DTR;
|
||||
val &= ~UART_UARTCR_RTS;
|
||||
val &= ~UART_UARTCR_OUT1;
|
||||
val &= ~UART_UARTCR_OUT2;
|
||||
val &= ~UART_UARTCR_RTSEN;
|
||||
val &= ~UART_UARTCR_CTSEN;
|
||||
if (cfg->mode == UART_MODE_NONE) {
|
||||
val &= ~UART_UARTCR_TXE;
|
||||
val &= ~UART_UARTCR_RXE;
|
||||
} else if (cfg->mode == UART_MODE_TX_ONLY) {
|
||||
val |= UART_UARTCR_TXE;
|
||||
val &= ~UART_UARTCR_RXE;
|
||||
} else if (cfg->mode == UART_MODE_RX_ONLY) {
|
||||
val &= ~UART_UARTCR_TXE;
|
||||
val |= UART_UARTCR_RXE;
|
||||
} else {
|
||||
val |= UART_UARTCR_TXE;
|
||||
val |= UART_UARTCR_RXE;
|
||||
}
|
||||
putreg32(val, addr);
|
||||
uart_set_baudrate(uart_id, 200 * 1000 * 1000, cfg->baudrate);
|
||||
|
||||
addr = UART0_BASE + UART_UARTLCR_H_OFFSET + (UART1_BASE - UART0_BASE) * uart_id;
|
||||
val = getreg32(addr);
|
||||
@ -60,15 +35,46 @@ void uart_init(uint8_t uart_id, struct uart_cfg_s *cfg)
|
||||
} else {
|
||||
val &= ~UART_UARTLCR_H_STP2;
|
||||
}
|
||||
val &= ~UART_UARTLCR_H_WLEN_MASK;
|
||||
val |= (cfg->data_bits << UART_UARTLCR_H_WLEN_POS);
|
||||
putreg32(val, addr);
|
||||
|
||||
addr = UART0_BASE + UART_UARTCR_OFFSET + (UART1_BASE - UART0_BASE) * uart_id;
|
||||
val = getreg32(addr);
|
||||
val |= UART_UARTCR_UARTEN;
|
||||
val &= ~UART_UARTCR_SIREN;
|
||||
val &= ~UART_UARTCR_SIRLP;
|
||||
val &= ~UART_UARTCR_LBE;
|
||||
val &= ~UART_UARTCR_DTR;
|
||||
val &= ~UART_UARTCR_RTS;
|
||||
val &= ~UART_UARTCR_OUT1;
|
||||
val &= ~UART_UARTCR_OUT2;
|
||||
val &= ~UART_UARTCR_RTSEN;
|
||||
val &= ~UART_UARTCR_CTSEN;
|
||||
if (cfg->mode == UART_MODE_NONE) {
|
||||
val &= ~UART_UARTCR_TXE;
|
||||
val &= ~UART_UARTCR_RXE;
|
||||
} else if (cfg->mode == UART_MODE_TX_ONLY) {
|
||||
val |= UART_UARTCR_TXE;
|
||||
val &= ~UART_UARTCR_RXE;
|
||||
} else if (cfg->mode == UART_MODE_RX_ONLY) {
|
||||
val &= ~UART_UARTCR_TXE;
|
||||
val |= UART_UARTCR_RXE;
|
||||
} else {
|
||||
val |= UART_UARTCR_TXE;
|
||||
val |= UART_UARTCR_RXE;
|
||||
}
|
||||
putreg32(val, addr);
|
||||
|
||||
addr = UART0_BASE + UART_UARTLCR_H_OFFSET + (UART1_BASE - UART0_BASE) * uart_id;
|
||||
val = getreg32(addr);
|
||||
if (cfg->fifo_enable) {
|
||||
val |= UART_UARTLCR_H_FEN;
|
||||
} else {
|
||||
val &= ~UART_UARTLCR_H_FEN;
|
||||
}
|
||||
val &= ~UART_UARTLCR_H_WLEN_MASK;
|
||||
val |= (cfg->data_bits << UART_UARTLCR_H_WLEN_POS);
|
||||
putreg32(val, addr);
|
||||
|
||||
|
||||
addr = UART0_BASE + UART_UARTIFLS_OFFSET + (UART1_BASE - UART0_BASE) * uart_id;
|
||||
val = getreg32(addr);
|
||||
val &= ~UART_UARTIFLS_TXIFLSEL_MASK;
|
||||
@ -76,11 +82,6 @@ void uart_init(uint8_t uart_id, struct uart_cfg_s *cfg)
|
||||
val &= ~UART_UARTIFLS_RXIFLSEL_MASK;
|
||||
val |= (cfg->rx_fifo_level << UART_UARTIFLS_RXIFLSEL_POS);
|
||||
putreg32(val, addr);
|
||||
|
||||
addr = UART0_BASE + UART_UARTCR_OFFSET + (UART1_BASE - UART0_BASE) * uart_id;
|
||||
val = getreg32(addr);
|
||||
val |= UART_UARTCR_UARTEN;
|
||||
putreg32(val, addr);
|
||||
}
|
||||
|
||||
void uart_set_baudrate(uint8_t uart_id, uint32_t src_clk, uint32_t baudrate)
|
||||
|
||||
19
main.c
19
main.c
@ -129,6 +129,7 @@ struct dma_sniff_cfg_s sniff_cfg = {
|
||||
};
|
||||
|
||||
struct uart_cfg_s uart_cfg = {
|
||||
.baudrate = 6 * 1000 * 1000,
|
||||
.mode = UART_MODE_TX_RX,
|
||||
.data_bits = UART_DATABITS_8,
|
||||
.parity = UART_PARITY_NONE,
|
||||
@ -138,10 +139,16 @@ struct uart_cfg_s uart_cfg = {
|
||||
.rx_fifo_level = UART_FIFO_LEVEL_1_2,
|
||||
};
|
||||
|
||||
void isr_uart0(void)
|
||||
{
|
||||
uint32_t status = uart_int_get_mask_status(UART_ID_0);
|
||||
printf("sts = 0x%08lX\t\n", status);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
reset_disable(RESET_IO_BANK0 | RESET_PADS_BANK0);
|
||||
reset_disable(RESET_PIO0);
|
||||
reset_enable(RESET_IO_BANK0 | RESET_PADS_BANK0 | RESET_PIO0 | RESET_DMA | RESET_UART0);
|
||||
reset_disable(RESET_IO_BANK0 | RESET_PADS_BANK0 | RESET_PIO0 | RESET_DMA | RESET_UART0);
|
||||
gpio_init(&gpio_led_cfg);
|
||||
gpio_init_simple(rmii.pin, GPIO_FUNC_PIO0, DISABLE, DISABLE);
|
||||
gpio_init_simple(rmii.pin + 1, GPIO_FUNC_PIO0, DISABLE, DISABLE);
|
||||
@ -171,9 +178,13 @@ int main(void)
|
||||
__enable_irq();
|
||||
pio_rmii_tx_init(&rmii);
|
||||
|
||||
reset_disable(RESET_UART0);
|
||||
// reset_enable(RESET_UART0);
|
||||
// reset_disable(RESET_UART0);
|
||||
while (!reset_get_state(RESET_UART0));
|
||||
uart_init(UART_ID_0, &uart_cfg);
|
||||
uart_set_baudrate(UART_ID_0, 200 * 1000 * 1000, 6 * 1000 * 1000);
|
||||
// uart_set_baudrate(UART_ID_0, 200 * 1000 * 1000, 2 * 1000 * 1000);
|
||||
uart_int_enable(UART_ID_0, UART_INT_ALL);
|
||||
// NVIC_EnableIRQ(UART0_IRQ_IRQn);
|
||||
|
||||
while (1) {
|
||||
static uint32_t tick_led = 0;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user