您尚未登录。

楼主 # 2022-06-30 14:46:32

tzp
会员
注册时间: 2022-05-16
已发帖子: 15
积分: 5

F1C100s UART寄存器

_20220630144314.png


怎么这么多寄存器偏移地址相同呢?通常都是发送和接收共用一个,大佬帮我解释一下呗,谢谢。

离线

#1 2022-06-30 14:57:30

dg
会员
注册时间: 2018-11-22
已发帖子: 38
积分: 91

Re: F1C100s UART寄存器

它有基地址。偏移地址一样。基地址不一样。
#define UART0_REG_BASE      0x01C25000
#define UART1_REG_BASE      0x01C25400
#define UART2_REG_BASE      0x01C25800

离线

楼主 #2 2022-06-30 15:10:28

tzp
会员
注册时间: 2022-05-16
已发帖子: 15
积分: 5

Re: F1C100s UART寄存器

??我红色框框里面,前三个不是都在一个地址么?

离线

楼主 #3 2022-06-30 15:12:32

tzp
会员
注册时间: 2022-05-16
已发帖子: 15
积分: 5

Re: F1C100s UART寄存器

这不就是一组寄存器么?3个UART每个对应一组,然后前三个寄存器偏移地址相同

离线

楼主 #4 2022-06-30 15:38:15

tzp
会员
注册时间: 2022-05-16
已发帖子: 15
积分: 5

Re: F1C100s UART寄存器

大概知道了,根据不同的标志位访问权限不同

离线

#5 2022-11-28 05:26:18

Simn
会员
注册时间: 2021-12-16
已发帖子: 33
积分: 3

Re: F1C100s UART寄存器

tzp 说:

大概知道了,根据不同的标志位访问权限不同

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);
}

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn