#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会跳变)
这句话什么意思
谢谢大家帮助了! |