|
楼主
发表于:
2010-08-04 22:17:14
另外,关于微控制器的GPIO口,比如由某个寄存器XXX来控制一组GPIO口,看到驱动中将这个XXX寄存器define为一个地址,微控制器的寄存器也有地址? 这些地址与内存中的地址又有什么联系呢?还是没有任何关系呢? 这个问题困扰了小弟好几年!! |
|
#1
得分:20
回复于:
2010-08-05 00:12:42
应该说是CPU通过总线来访问外设,总线分三种:控制总线,数据总线,地址总线,具体的可以去看有关微机原理的书。
外设的寄存器地址和内存的地址都是地址,只是在地址上的数据有不同而已 打个最浅显的比方:假如外设地址总线是一根水管,那么外设就像依次接挂在水管上的水龙头,水管里的水就是CPU和外设传输的数据 |
|
#2
得分:20
回复于:
2010-08-05 14:53:09
呵呵,我深切体会LZ的感受,2楼的解释一点都不浅显,LZ估计还是很困惑。
地址,寄存器,数据,外设。 假设有一段地址A0~A9, A0~A3地址段是MCU控制寄存器 A0:设置1 REST; 设置0 Undo(对芯片自己的操作:复位) A1:(GPIO)设置1 On;设置0 Off (假如对应的GPIO口连到一个开关设备上,此操作就是开关这个设备) 对这些地址的访问或操作,就是在控制芯片自己或外设 A4~A9地址段是存储区 MCU运行过程中要用到的数据都放到这里来, 对这些地址的访问,就是访问数据存储、清除、复制等 所以,不同MCU不同的型号,他们的寄存器地址和内容都不一样, 嵌入式程序不能通用的道理就在这里,它的硬件决定了的。 |
|
#3
得分:0
回复于:
2010-08-05 15:33:58
关键的问题是这些地址可能与内存中某个地址是重复的。这点我很不理解。如果映射到内存的话是不应该有重复的。比如网卡映射到
0x1fff ~0x2fff,对这段内存的读写应该就是对网卡的读写。。但是 这个寄存器地址很明显有跟内存地址重复了。。
|
|