1.3.1不同位宽设备的连接

S3C2440是32位机,即操作一次内存设备的单位为4字节(32条数据线)。S3C2440共有8个内存块,每个块128MB(0~26共27条地址线),共1GB,存储器映射图如下。
在这里插入图片描述
使用S3C2440存储器操作时,由CPU给内存控制器发出读写信号,内存控制器再通过地址线发送地址信号给外设,通过信号线进行读写操作。由于S3C2440对存储器的读写操作是以4字节为单位,而存储器分为8位,16位,32位,所以不同位宽的设备,读取操作是不同的,这就导致了连接上的不同。

假设CPU执行:
    mov R0, #3
    LDRB R1, [R0]

LDRB中的B为Byte,命令为读地址3的一个字节,本意是读出第3个字节。此时在8位,16位,32位位宽的设备上,地址线的连接是不同。

  • 当连接8位存储器时,2440的地址线A0接存储器的A0,A1接A1,此时R0 = 3,所以A0 = A1 = 1,去取第3个8bit数据。
  • 当连接16位存储器时,2440的地址线A1接存储器的A0,A2接A1,此时A0 = A1 = 1,A2 = 0,所以存储器的A0 = 1,A1 = 0,去取第1个16bit数据,内存控制器再根据A0 = 1,取出这16bit数据的后八位回给CPU。
  • 当连接32位存储器时,2440的地址线A2接存储器A0,依次下接,此时存储器的A0 = 0,去取第0个32位数据,然后内存控制器根据A0 = A1 = 1,取出这32位数据的第三组8位数据,也就是最后8位数据回给CPU。
    在这里插入图片描述
    所以,过程就是CPU发出地址–>ROM收到地址–>ROM返回数据–>内存控制器跳出数据给CPU。

还有一个问题,2440内部有八个块,要怎么确定各个芯片的访问地址

可以从以下两点确定:

  1. 根据片选信号确定基地址。
  2. 根据芯片所连地址线确定范围。

S3C2440中,外接了Nor,net,SDRAM,接线如下所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中,Nor Flash用到A20,A19…A1,A0共21条线(2^21 = 2M),基地址为0,所以范围是0~0x1FFFFF;

net用到A2,A0,所以范围 = Base + 0b000 ~ Base + 0b101 = 0x2000,0000 ~ 0x2000,0005;

S3C2440外接了一块64MB的SDRAM,基地址为0x3000,0000,使用17条地址线(2^17 = 128K),SDRAM分为行地址和列地址,128K * 128K = 64MB。

基地址是由连接的片选和存储器映射决定的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值