S3C2440的存储器管理

以前不知道S3C2440的每个BANK都要设置位宽,也不知道为什么要设置,今天弄懂了。在使用BANK之前要设置每个BANK所接的外设时多少位的?由BWSCON寄存器设置,默认情况为8位。由于BANK0位启动区,所以有硬件指示,通过读OM[1:0]引脚来设置。

 

 当宽度为8位的时候,"Memory Controller"硬件是这样做的:(不错位连接)

1CPU想进行8位操作时,直接根据软件所给出的地址读取8位数据返回给CPU

2CPU想进行16位操作时,进行两次8位的操作,并组成一个16位的数据返回给CPU

3CPU想进行32位操作时,进行四次8位的操作,并组成一个32位的数据返回给CPU

 

 当宽度为16位的时候,"Memory Controller"硬件是这样做的:(错一位连接)

1CPU想进行8位操作时,直接根据软件所给出的地址读取16位数据,并将低8位返回给CPU

2CPU想进行16位操作时,直接根据软件所给出的地址读取16位数据返回给CPU

3CPU想进行32位操作时,进行28位的操作,并组成一个32位的数据返回给CPU

 

 当宽度为32位的时候,"Memory Controller"硬件是这样做的:(错两位连接)

1CPU想进行8位操作时,直接根据软件所给出的地址读取32位数据,并将低8位返回给CPU

2CPU想进行16位操作时,直接根据软件所给出的地址读取32位数据,并将低16位返回给CPU

3CPU想进行32位操作时,直接根据软件所给出的地址读取32位数据返回给CPU

参考:http://hi.baidu.com/zengzhaonong/blog/item/6de41c4f99e5cd3dafc3abc6.html

 

PS:关于S3C2440扩展网口电路时,CMD为什么要接ADDR2?

 Memory Controller操作的是DATA[15:8]。即0x0的时候通过DATA[7:0]写入要操作寄存器的地址,0x1的时候通过DATA[15:8]读写寄存器的数据。而DM9000却始终是通过DATA[7:0]操作寄存器的,这样产生了矛盾。如果错两位,并且使用0x0写入要操作寄存器地址,使用ox4作为读写寄存器地址,这样Memory Controller始终使用的是DATA[7:0]传输数据,这样与DM9000数据传输规则吻合。

 

答:首先由于使用了DATA[15:0],固将位宽设为16位。但如果只错一位,则每次读写地址的时候Memory Controller操作的是DATA[7:0],而读写数据的时候

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值