首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

ADS1.2代码

2012-02-17 
ADS1.2代码求助;1)#defineWriteflash(addr,dat)*((volatile INT16U *)(addr1))(INT16U)dat#defineReadf

ADS1.2代码求助;
1)
#define Writeflash(addr,dat)*((volatile INT16U *)(addr<<1))=(INT16U)dat
#define Readflash(addr)(*((volatile INT16U *)(addr<<1)))
/*addr为读写操作的半字地址,data则为要写入的半字数据。因为ARM处理器是以字节为单位
进行数据处理的,而SST39VF160是16位数据宽度,所以,addr地址必须左移1位。
  有了以上这两个宏定义以后,进行读写擦除等操作就方便了*/
以上是厂家给的解释;只不过我感觉解释理解不了??
我的疑问在于为什么要移位;移位解决了什么问题??????、
望高手给与解答

[解决办法]
其实是这样的,你的mcu和flashrom SST39VF160的连接地址线的最低位被直接拉低了,也就是说你传入mcu的地址是你要你需要的地址的高15位。

也就是说addr=1 其实访问的是0x0002,addr=3 访问的是0x0006

至于为什么这么干,是因为 类似0x0003这样的地址是不存在的。

至于为什么不存在 是因为16bit位宽的flashrom可以理解为有很多个小的16bit存储器连接而成,这16bit是不可分割的,这也是内存对齐的由来。。。。

热点排行