怎么这么多寄存器偏移地址相同呢?通常都是发送和接收共用一个,大佬帮我解释一下呗,谢谢。
离线
它有基地址。偏移地址一样。基地址不一样。
#define UART0_REG_BASE 0x01C25000
#define UART1_REG_BASE 0x01C25400
#define UART2_REG_BASE 0x01C25800
离线
??我红色框框里面,前三个不是都在一个地址么?
离线
这不就是一组寄存器么?3个UART每个对应一组,然后前三个寄存器偏移地址相同
离线
大概知道了,根据不同的标志位访问权限不同
离线
大概知道了,根据不同的标志位访问权限不同
Ofset 0x00 Read RBR ( data bit 7:0) bits 7:0
Ofset 0x00 Write THR ( data bit 7:0) bits 7:0
Ofset 0x00 R/W DLL ( data bit 7:0) bits 15:8 Divisor Latch low (7:0 Read RBR / Write THR)
Exemple:
uint16_t val = (uint16_t)(apb_clock / baud / 16UL);
write32(UartBase+DLL, val & 0xFF); // Write divisor value
inline void uart_tx(uint32_t UartBase, uint8_t data)
{
write32(UartBase+THR, data);
}
inline uint8_t uart_get_rx(uint32_t UartBase)
{
return (uint8_t)read32(UartBase+RBR);
}
离线