作者:guolele Blog:http://hi.baidu.com/guolele1990/home
总线简单理解 先总体上简单的说一下总线这概念,其实它是一束线的整合体,可看成是几十条线组合在一大条名字叫bus的线上,就叫总线。一条总线上可以允许连接多个设备,那它怎么识别?总线就是发不同的地址编码(0000111之类),只有符合这编码的设备就响应它操作。
总线的位数有什么意义?什么是寻址空间? 总线的位数决定寻址空间大小,什么是寻址空间?寻址空间就是你通过总线能访问的最大的内存空间(这里的内存空间其实就是地址范围),计算是寻址大小= 2^n bit。这样就解释了为什么s3c2440会以128M为一个bank。因为s3c2440的总线位数为27,寻址空间就为128M,如果超出了128M的范围,CPU就寻不了址,也就读不了也写不了,所以大于128M的就浪费了,也是为什么32bit的芯片最大为4G内存的原因。
IO空间与内存空间 讲这个问题,就涉及到硬件知识,CPU的总线在X86体系中,是具有两个空间映射的,即又有IO空间又有内存空间,它们是物理上不同的整体。而ARM就不存在IO空间
先说寄存器与内存的区别?就是side effect,也就是你读写寄存器时,会引起该地址的数据变化。 IO端口:当寄存器或内存位于IO空间时,称为IO端口。一般寄存器也俗称I/O端口,或者说I/O ports,这个I/O端口可以被映射在Memory Space,也可以被映射在I/O Space IO内存:当寄存器或内存位于内存空间时,称为IO内存
linux访问IO port必须用IO port寻址方式 ARM一样嵌入式是只有内存空间的,IOport 寻址是采用内存映射的。
另外:如何确定一个芯片在CPU上的绝对地址,即物理地址 主要是看片选线接在哪一个nGCSn引脚(这引脚是当你
以CS8900a为例:一般连在nGCS3,nGCS3是位于第4个128M,即为128* 3为0x18000000 为基地址,注意,以它为基地址并不一定是操作它,操作具体(即映射基地址)还要看芯片上有没说明,这里CS8900a就提到它提供的两种访问模式不一样,映射基地址也会不一样。 MEM MODE 它的mem mode就是直接就是nGCSn = nGCS3 IO port mode 这种模式基地址并不是nGCS3,首先还要看原理图,因为为了提供两种模式访问(就是访问时是应该IOW,还是MEMW),一般硬件上会采用逻辑器件加上一根地址总线来分开,我这用的是ADDR24(用于帮助选IO PORT模式)。别外,芯片上也说了,它的以io模式的基地址又是有一个偏移,一般为300h,再操作其它那几个寄存器才是元件手册上的偏移,现在明白为什么驱动上会这个映射地址了吧?那么它的基地址是? Io base address = nGCS3 + (1<<24) + 300h
|
关于地址总线-寻址空间-IO内存-IO端口理解(s3c2440例)
最新推荐文章于 2021-11-03 11:02:20 发布
关于地址总线-寻址空间-IO内存-IO端口理解(s3c2440例)
2010-12-23 19:09