[ZLG-ARM] 关于外部RAM的访问地址问题,请教各位!

[复制链接]
 楼主| sembedfish 发表于 2007-1-5 14:21 | 显示全部楼层 |阅读模式
1.&nbsp;我看了LPC2210和LPC2214的使用手册,在LPC2210的手册上,以32位宽访问32位的存储器,其地址总线为A[31:2];在LPC2214的手册上,以32位宽访问32位的存储器,其地址总线为A[31:0].&nbsp;请问是哪个数据手册编辑错误还是这两个器件有什么不一致.<br />2.&nbsp;如果以16位数据宽度和外部RAM相连,&nbsp;其对外部RAM寻址的最低位地址是否应该是为0?那么如果比如外部RAM在BANK1,基地址为0x81000000,&nbsp;则地址0x81000001是访问什么?&nbsp;怎么处理?
luky133 发表于 2007-1-5 15:00 | 显示全部楼层

我也刚搞明白的

应该是CPU的A[2:31]与片外存储器的A[0:31]连接.<br />如果是16位总线的话是CPU的A[1:15]与片外存储器的A[0:15]连接.<br />这个是根据指令来设定的,指令是按照字节来访问的,16位的话是两个字节一起访问.所以不用接A0.以此类推.<br />BANK0和BANK1的访问是由CS0和CS1来控制的.
zlgarm 发表于 2007-1-5 15:04 | 显示全部楼层

re:

&nbsp;&nbsp;&nbsp;外部存储器地址使用哪些地址线往往还与具体的外部存储器相关.<br /> &nbsp;如果外部RAM为16位,一般最低位地址为0,以楼上的例子,如果有用读半字指令,读取0x81000000时,那么读取的是0x81000000和0x81000001两个字节.如果是用读取字节指令,那么只可以单独读取0x81000000和0x81000001了.LPC2200使用BLS0和BSL1引脚来告诉存储器,读取的是高字节还是低字节.<br />
luky133 发表于 2007-1-5 15:27 | 显示全部楼层

周工写的我不明白了,是我的理解有错吗?

我以为外部存储器的接法是由总线宽度决定的.<br />至于对0X81000000的访问可以直接把CS1拉低,再可根据BLS0和BLS1来控制字节访问<br />我这样理解对吗?
 楼主| sembedfish 发表于 2007-1-5 15:46 | 显示全部楼层

谢谢zlgarm的回答, 我用的就是EasyRam2200.

谢谢楼上的回答.<br /><br />当用16位数据总线访问外部RAM时,&nbsp;其访问地址是不是严格按半字对齐的.<br />那么,&nbsp;如果我这样定义<br />(*((volatile&nbsp;unsigned&nbsp;short*)ETHER_BASE_ADDR+offset))<br />offset为偏移地址,&nbsp;取值为0-1f,&nbsp;好像是可以访问以基地址ETHER_BASE_ADDR后的任意地址的内容.&nbsp;这怎么来解释?&nbsp;<br />硬件采用的是EasyARM2200,&nbsp;ARM与RT8019的连接,&nbsp;RTL8019的是8位数据总线宽度,&nbsp;ARM是16位数据总线宽度.
db10 发表于 2007-1-6 22:51 | 显示全部楼层

呵呵

&nbsp;其实不管是接成16位,还是8位的,软件上都是可以直接访问一个字节和2个字节的,例如定义一个指针,指针指向2个字节的数据,那么就可以直接读出2个字节,如果指针是指向单自己,那就读出一个字节。<br />&nbsp;当然对于硬件上,如果接成8位的数据总线,那地址0是要接上的,这样如果读2个字节,那硬件自动完成读两次。如果接成16位数据总线方式,那地址0是不要接的,如果读两个2字节的话,硬件自动只读一次就可以了,如果这种情况下要读1个字节的,程序编译后,硬件虽然也读两2个字节,但是只取其中一个有用的。&nbsp;其实这个工程是硬件出来的,更本不要关心。想读一个字节,2个字节,4个字节都是程序操作就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

11

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

4

主题

11

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部