c - 具有相同地址的两个不同寄存器

标签 c

我正在编写代码来对 UART 芯片进行编程。发送和接收寄存器的地址偏移量均为 0x00。那么如何访问两个寄存器呢?

最佳答案

这两个寄存器不是每个都可以从代码中读取和写入的。 UART 发送寄存器是只写的。 UART 接收寄存器是只读的。 @Weather Vane .

硬件使用读/写控制作为位,如地址位,区分寄存器访问。

这意味着代码无法直接读取写入的内容。代码也不能直接写入接收寄存器。


在极少数情况下,如果代码需要读取 UART 发送寄存器的内容,则可以使用影子存储器中的副本。

static unsigned char UART_write_shadow;

void UART_transmit_write(unsigned char x) {
  *UART_transmit_register_address = x;
  UART_write_shadow = x;
}

unsigned char UART_transmit_read(void) {
  return UART_write_shadow;
}

关于c - 具有相同地址的两个不同寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38345144/

相关文章:

c - 如何读取 C 中空格后的下一个字符?

Java JNI - 将 C 中分配的资源与 java 对象相关联?

无法将负输入设置为零。如何设置负数组?

c - 为什么这里会出现无限循环呢? (链表打印)

c - 时域重叠相加如何实现时间拉伸(stretch)?

c++ - 尝试从 C 加载 penlight lua 模块

计算数组的平方值的平均值

c - 使用循环链表实现Queue

c - 汇编函数 FPU with c

编译器会生成无用的汇编代码吗?