zoukankan      html  css  js  c++  java
  • 当 Bank1 接的是 16 位宽度存储器的时候:HADDR[25:1] FSMC-A[24:0]。 当 Bank1 接的是 8 位宽度存储器的时候:HADDR[25:0] FSMC_A[25:0]。

    https://zhidao.baidu.com/question/1604602410308497067.html讲得挺好,就是CPU在读取16位宽的数据的时候,如果不对HADDR进行处理,就读取不到后八位的字节。剔除0x00这个地址出现了类似编码器的数字规律解决了问题。 还需有时间了了解下。

    我猜,来到这个问题底下的我们,疑问估计都是相同的,那就是为什么HADDR[0]未接?一般不是都一对一连接的吗?怎么到了这里它就不能了呢?这越想越觉得这种接线方法太反常理了。。。对不对?

    首先,CPU中一个地址只能存储一个字节的数据,而当CPU通过地址线访问外部存储器的一个地址时,如果外部储存器的一个地址的数据刚好是八位时(即一个字节),访问一次就可接收过来;但是,当外部存储器的一个地址里存的是16位数据时(即两个字节),CPU就开始傻眼了,“我访问你一次,你竟然给我两个字节的数据!!!”(如下图所示)

    然后,CPU为了解决这个问题,只能够再派一个地址去访问外部存储器的同一个地址,把剩下的那个字节也接收过来,之后再接着访问外部存储器的第二个地址,依此类推。。。在此过程中,CPU如果还是把地址线一对一地连接到外部存储器上,那就做不到让自己的第二个地址还继续访问同一个地址了。。。

    于是,人们帮了CPU一把,让它每一回访问时还是照旧把自己内部的地址按二进制拆分放到HADDR的0~25上(如下图)

    然后,到了FSMC_A一端,人们选择性地去掉HADDR[0],然后才把把剩余的25根依次接到FSMC_A上(人们之所以这么做,正是因为他们发现了一个规律,那就是,通过HADDR[1]是0还是1却正好能够区别外部存储器上的0地址和1地址,而通过HADDR[2]和HADDR[1]是10还是11又正好能够区别外部存储器上的2地址和3地址。。。依此类推,下一个就是通过HADDR[3]HADDR[2]和HADDR[1]一起来判断)

    最后,地址区分出来了,接收数据也就好说了,因为在CPU那边,它对人们把HADDR[0]不接到FSMC上是不知情的,所以,它还是照旧把地址逐次增一地去访问,也还是发出一个地址读回一个字节,但是它不知道的是,自己每发两个地址都会停留在外部存储器的同一个地址上,所以最终,同一个地址上的两个字节都会被CPU读走。。。

  • 相关阅读:
    使用电脑模拟微信内置浏览器
    手机QQ浏览器属于代理服务器吗?
    艾伟:[你必须知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二 狼人:
    艾伟:Silverlight 2.0在IE6 SP2上的虚线边框问题 狼人:
    艾伟:ASP.NET安全问题--Forms验证(后篇)--实战篇 狼人:
    艾伟:基于.NET平台的Windows编程实战(四)—— 数据库操作类的编写 狼人:
    艾伟:WMGPS开发 狼人:
    艾伟:基于.NET平台的Windows编程实战(一)——前言 狼人:
    艾伟:.NET,你忘记了么?(八) 从dynamic到特性误用 狼人:
    艾伟:小巧优美的ORM框架doodads入门指南[转载] 狼人:
  • 原文地址:https://www.cnblogs.com/tiange-137/p/11820412.html
Copyright © 2011-2022 走看看