【发布时间】:2017-04-11 08:12:19
【问题描述】:
下面的函数打印出一个UART寄存器的内容。这是寄存器映射。
有人可以解释为什么,+=4 中的 for 循环上升了吗?
谢谢
#define UART0_BASE 0x21000
void print_uart(unsigned int base) {
int i;
int val;
unsigned int adr;
for (i=0; i< 0x18; i+=4) {
adr = base + i;
printf("Uart %s [0x%x] -> 0x%x\n",uart_reg[i>>2],adr,val);
}
}
【问题讨论】:
-
看起来坏了。它适用于什么处理器?
-
外部外围设备的地址不需要在“线”的两侧相同。您可以将 UART 的
A0..An连接到 CPU/内存控制器的A2..An+2,并将A0,A1固定在地面上。这将导致 CPU 端有 4 个地址的距离,而它们在 UART 端仍然相邻。由于您的 UART 有 16 位寄存器,每个地址已经代表 2 个字节。
标签: c cpu-registers uart