找回密码
 注册
搜索
查看: 1447|回复: 7

[讨论] 一个大家都曾经疑惑的问题?

[复制链接]
发表于 2006-8-4 23:12:00 | 显示全部楼层 |阅读模式
当cpu的字长与存储器的位宽不一致的时,连接这两个设备的地址线要求,cup端的a1连到存储器a0脚,a2连a1,a3连a2。。。 依次类推,而cup端的a0脚悬空。
这个结论我是知道,但真正的原因且老是有一种似懂非懂的感觉,希望这里能有高人能指出真正的原因,如过直接按pin脚连接,又会有什么后果呢?
发表于 2006-8-5 23:22:00 | 显示全部楼层
随便找一个存储器的接口资料,你就明白了!很简单的
点评回复

使用道具 举报

发表于 2006-8-8 10:40:00 | 显示全部楼层
8bit Memory: A0-->A0
16bit Memory: A1-->A0

这样是地址连续存储的守则。8bit可以任意地址访问,16bit规定只在偶数地址上访问。如果软件工程师Debug跟踪RAM,就知道其方便了
点评回复

使用道具 举报

发表于 2006-8-9 11:30:00 | 显示全部楼层
我感觉你的问题没有描述得很清楚。

另外,CPU与memory之间的连接是很简单的,跟你处理器的位宽相关,一般的处理器都有与memory的接口参考设计,而memory的datasheet也会写,在intel的网站上下载一款处理器或nor flash的资料看看就可以了。
点评回复

使用道具 举报

 楼主| 发表于 2006-8-9 22:36:00 | 显示全部楼层
其实我的疑问是在看《C语言嵌入式系统编程修炼》这本电子书后,有感而发,下面是选自该书部分内容,可惜我找不到文中提到的《IT论语》之《微机原理篇》,也就无法理解A0脚为何要闲空,如果那位朋友有该文档请发一份给我,谢谢!

/////////////////////////////////////////////////////////////////////////////////////
CPU字长与存储器位宽不一致处理

   在背景篇中提到,本文特意选择了一个与CPU字长不一致的存储芯片,就是为了进行本节的讨论,解决CPU字长与存储器位宽不一致的情况。80186的字长为16,而NVRAM的位宽为8,在这种情况下,我们需要为NVRAM提供读写字节、字的接口,如下:

typedef unsigned char BYTE;
typedef unsigned int WORD;
/* 函数功能:读NVRAM中字节
* 参数:wOffset,读取位置相对NVRAM基地址的偏移
* 返回:读取到的字节值
*/
extern BYTE ReadByteNVRAM(WORD wOffset)
{
  LPBYTE lpAddr = (BYTE*)(NVRAM + wOffset * 2); /* 为什么偏移要×2? */

  return *lpAddr;
}

/* 函数功能:读NVRAM中字
* 参数:wOffset,读取位置相对NVRAM基地址的偏移
* 返回:读取到的字
*/
extern WORD ReadWordNVRAM(WORD wOffset)
{
  WORD wTmp = 0;
  LPBYTE lpAddr;

/* 读取高位字节 */
  lpAddr = (BYTE*)(NVRAM + wOffset * 2); /* 为什么偏移要×2? */
  wTmp += (*lpAddr)*256;
  /* 读取低位字节 */
  lpAddr = (BYTE*)(NVRAM + (wOffset +1) * 2); /* 为什么偏移要×2? */
  wTmp += *lpAddr;
  return wTmp;
}

/* 函数功能:向NVRAM中写一个字节
*参数:wOffset,写入位置相对NVRAM基地址的偏移
* byData,欲写入的字节
*/
extern void WriteByteNVRAM(WORD wOffset, BYTE byData)
{
  …
}

/* 函数功能:向NVRAM中写一个字 */
*参数:wOffset,写入位置相对NVRAM基地址的偏移
* wData,欲写入的字
*/
extern void WriteWordNVRAM(WORD wOffset, WORD wData)
{
  …
}
   子贡问曰:Why偏移要乘以2?

   子曰:请看图1,16位80186与8位NVRAM之间互连只能以地址线A1对其A0,CPU本身的A0与NVRAM不连接。因此,NVRAM的地址只能是偶数地址,故每次以0x10为单位前进!


图1 CPU与NVRAM地址线连接
   子贡再问:So why 80186的地址线A0不与NVRAM的A0连接?

   子曰:请看《IT论语》之《微机原理篇》,那里面讲述了关于计算机组成的圣人之道。
点评回复

使用道具 举报

发表于 2006-8-10 11:07:00 | 显示全部楼层
这本书误人,扔了他吧
点评回复

使用道具 举报

发表于 2006-11-29 13:18:00 | 显示全部楼层
首先声明我刚没做过驱动,只是一点理解,不对请大家指出
    由于是偶地址访问,所以他不接A0位 目的是丢弃最低位
这样当访问时,真正的地址其实就是当前值左移一位,也就需要乘以2了
点评回复

使用道具 举报

发表于 2006-11-29 18:41:00 | 显示全部楼层
7楼回答right,对于mcu,一个address只能是8bit,而16bit的flash每个地址对应的是16bit
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-7-2 13:19 , Processed in 0.046975 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表