我现在情况如下:<br />1、我在内部Flash中调试,程序向内部Flash里下载时出现下载进度条,说明程序已下载进去。<br />2、SST39VF1601的读写取程序如下:<br />/*****************************************************************************<br />*名称:WordProgram()<br />*功能:半字(16位)数据写编程<br />*入口参数:Addr 编程地址(SST39VF1601内部地址)<br />* Data 编程数据<br />*出口参数:返回TRUE表示操作成功,返回FALSE表示操作失败<br />*******************************************************************************/<br />uint8 WordProgram(uint32 Addr,uint16 Data)<br />{<br /> volatile uint16 *ip;<br /> uint16 temp1,temp2;<br /> <br /> ip=GetAddr(0x5555); //转换地址0x5555<br /> ip[0]=0xaaaa; //第一个写周期,地址0x5555,数据0xAA<br /> ip=GetAddr(0x2aaa);<br /> ip[0]=0x5555; //第二个写周期,地址0x2aaa,数据0x55<br /> ip=GetAddr(0x5555);<br /> ip[0]=0xa0a0; //第三个写周期,地址0x5555,数据0xA0<br /> <br /> ip=(volatile uint16 *)(FLASH_ADDR|(Addr&0x1FFFFF));<br /> *ip=Data; //第四个写周期,地址ADDR,数据Data<br /> while(1) //等待操作完成。<br /> {<br /> temp1=*ip;<br /> temp2=*ip;<br /> if(temp1==temp2)<br /> {<br /> if(temp1!=Data)<br /> {<br /> return(FALSE);<br /> }<br /> else<br /> {<br /> return(TRUE);<br /> }<br /> }<br /> }<br /> return(TRUE);<br />}<br /><br />/******************************************************************************<br />*名称:ChipErase()<br />*功能:芯片全片擦除<br />*入口参数:无<br />*出口参数:返回TRUE表示操作完成,返回FALSE表示操作失败<br />*******************************************************************************/<br />uint8 ChipErase(void)<br />{<br /> volatile uint16 *ip;<br /> uint16 temp1,temp2;<br /> <br /> ip=GetAddr(0x5555);<br /> ip[0]=0xaaaa;<br /> ip=GetAddr(0x2aaa);<br /> ip[0]=0x5555;<br /> ip=GetAddr(0x5555);<br /> ip[0]=0x8080;<br /> ip=GetAddr(0x5555);<br /> ip[0]=0xaaaa;<br /> ip=GetAddr(0x2aaa);<br /> ip[0]=0x5555;<br /> ip=GetAddr(0x5555);<br /> ip[0]=0x1010;<br /> <br /> while(1)<br /> {<br /> temp1=*ip;<br /> temp2=*ip;<br /> if(temp1==temp2)<br /> {<br /> if(temp1!=0xffff)<br /> {<br /> return(FALSE);<br /> }<br /> else<br /> {<br /> return(TRUE);<br /> }<br /> }<br /> }<br /> return(TRUE);<br />}<br />/*******************************************************************************<br />*名称:ReadProgram()<br />*功能:读指定SST39VF1601存储的单元的数据<br />*入口参数:ch 指定SST39VF1601存储单元的地址<br />*出口参数:addr 指定SST39VF1601存储单元的数据<br />********************************************************************************/ <br />uint16 ReadProgram(uint16 ch)<br />{<br /> volatile uint16 *addr;<br /> <br /> addr=(volatile uint16 *)FLASH_ADDR + ch;<br /> <br /> return(*addr);<br />}<br />3、在不使用SST39VF1601的情况下,液晶显示正常。<br />4、使用SST39VF1601读取时液晶显示就出现不正常现象。并程序停止。
|