Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1048160
  • 博文数量: 178
  • 博客积分: 10222
  • 博客等级: 上将
  • 技术积分: 2215
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-03 11:27
个人简介

有所追求

文章分类

全部博文(178)

文章存档

2012年(1)

2011年(5)

2010年(3)

2009年(78)

2008年(91)

我的朋友

分类:

2008-01-27 23:16:57

A3 0x0003  B7  
    B6
A2 0x0002 B5 
  B4
A1 0x0001 B3
    B2
A0 0x0000 B1 
    B0 
 
本想早点睡觉,却遇到一个很久以前看过的问题,因为当初没有深入了解更多,现在花点时间整理一下。
 
ARM 外接 16BIT外部存储器时,采用A[21..1]接存储器的A[20..0]。分析原因如下:
 
An--------------------------An-1
.                            .
.                            .
A7--------------------------A6
A6--------------------------A5
A5--------------------------A4
A4--------------------------A3
A3--------------------------A2
A2--------------------------A1
A1--------------------------A0
A0 接地
 
对于16位的存储器是这样的,ADDR每加1,就指向下两个字节。而在ARM中,如果配置外部存储器是16位,则
 
发送的地址A0无效,比如0x00fffff,相当于0x00ffffe,如果跟存储器的连接是一一对应的花,只能访问
 
存储器的偶地址空间(因为A0始终无效,为0为1没试过),采用如上接法就行了。访问存储器时,因为存储器
 
是16位,所以地址增量是2,即ADDR = ADDR + 2;我的程序中设 pB0SIZE = sizeof(U16)。这样每次访
 
问送出一个地址,就能读出两个字节,然后地址增加2,在读取……。
 
比如要开辟1024字节的空间,寻址范围是10位,00,0000,0000-11,1111,1111,如果采用一一对应的
 
方法,那么存储器的奇地址空间就没有被使用;如果采用错位的接法,实际上仅仅使用ARM地址线的A[9..1],
 
即使用的是上述范围中的偶地址,9根地址线寻址范围只有512,但是因为存储器是16位的双字节,
 
实际上寻址为1024字节。即ARM的偶地址寻址存储器的字地址。
 
我们可以这样认为:16位存储器的设计者将低位A[0]省掉了,我们只要读取一次就可以得到两个字节,读取的
 
这个地址对应于ARM发出的地址的A[21..1],即实际上是存储器需要的偶地址(偶地址是针对ARM发出的地址
 
而言的)。
 
如果想寻址存储器的0X5555,那么实际寻得的是0X2AAA,这种情况,必需把0X5555左移1位送送出。
阅读(2214) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~