打印

菜鸟提问:关于EASYARM2200 外部存储器实验

[复制链接]
1893|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
鸡毛竞竞|  楼主 | 2010-1-5 13:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define  GetAddr(addr) (volatile uint16  *)(FLASH_ADDR|(addr<<1))
/****************************************************************************
* 名称:WordProgram()
* 功能:半字(16位)数据编程。
* 入口参数:Addr  编程地址(SST39VF160内部地址)
*          Data  编程数据
* 出口参数:返回TRUE表示操作成功,返回FALSE表示操作失败
****************************************************************************/
uint8  WordProgram(uint32 Addr, uint16 Data)
{  volatile uint16  *ip;
   uint16  temp1,temp2;
   ip = GetAddr(0x5555); // 转换地址0x5555
   ip[0] = 0xaaaa;   // 第一个写周期,地址0x5555,数据0xAA
   ip = GetAddr(0x2aaa);
   ip[0] = 0x5555;   // 第二个写周期,地址0x2aaa,数据0x55
   ip = GetAddr(0x5555);
   ip[0] = 0xa0a0;   // 第三个写周期,地址0x5555,数据0xA0
   
   ip = GetAddr(Addr);
   *ip = Data;    // 第四个写周期,地址Addr,数据Data
   
   while (1)    // 等待操作完成 (若编程操作没有完成,每次读操作DQ6会跳变)
   {  temp1 = *ip;   
      temp2 = *ip;
      if (temp1 == temp2)
      {  if (temp1 != Data)
         {  return(FALSE);
         }
         else
         {  return(TRUE);
         }
      }
   }
   
   return(TRUE);
}



该函数中前3个周期一定要这样写么?
后面那个WHILE循环岂不是死循环?
作用是干什么的?
等待操作完成 (若编程操作没有完成,每次读操作DQ6会跳变)
这句话什么意思

谢谢大家帮助了!

相关帖子

沙发
鸡毛竞竞|  楼主 | 2010-1-5 13:30 | 只看该作者
请问WHILE中temp1和temp2读到的数据还有可能不同么?

使用特权

评论回复
板凳
HWM| | 2010-1-5 13:36 | 只看该作者
有可能,如果ip是IO寄存器地址就可能不同。

使用特权

评论回复
地板
my8804| | 2010-1-5 13:55 | 只看该作者
本帖最后由 my8804 于 2010-1-5 14:26 编辑

该函数中前3个周期一定要这样写么?
:不知道你说的 "一定要这样写"是什么意思??
不过这3个周期指令(比如在0x5555、0x2aaa这些伪地址上写入0xaa、0x55这些对应的数据)是memory datasheet 里面"确定"的 ,硬性规定的;顺序也是确定的.......

后面那个WHILE循环岂不是死循环?
作用是干什么的?
:判断是否完成, 完成就跳出循环......

等待操作完成 (若编程操作没有完成,每次读操作DQ6会跳变)
这句话什么意思
:如果操作没有完成,DQ6是1、0来回跳变的 ;
当DQ6不变化的时,要么保持0要么保持1时 ,操作就是完成了

不知道我的解释对不对.......:lol

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

4

帖子

1

粉丝