打印

关于EASYARM2200外部存储器实验

[复制链接]
1151|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
鸡毛竞竞|  楼主 | 2010-1-5 13:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
// FLASH的起始地址(分配为Bank1块)
#define  FLASH_ADDR  0x81000000
// 转换地址。将要发送给SST39VF160的地址值进行转换,以便于LPC2210输出。
// 由于SST39VF160的A0是与LPC2210的A1相连,所以addr要左移1位。
#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);
}


第四个写周期是什么意思??  
等待操作完成 (若编程操作没有完成,每次读操作DQ6会跳变)
什么意思?

谢谢大家

相关帖子

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

本版积分规则

3

主题

4

帖子

1

粉丝