hotpower 发表于 2008-5-5 23:11

DSP2812读写SST39VF800A之C++程序源码

/*-----------------------------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;DSP2812读写SST39VF800A之C++程序源码<br />本演示程序在Study-2812增强版上通过运行测试<br /><br />菜农HotPower@126.com&nbsp;&nbsp;2008.5.5&nbsp;&nbsp;于西安大雁塔菜地<br />------------------------------------------------------*/<br />#include&nbsp;&quot;flash.h&quot;<br /><br />FlashObj::FlashObj(void)<br />{<br />&nbsp;&nbsp;Init();&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;Test();<br />}<br /><br />void&nbsp;FlashObj::Init(void)<br />{<br />&nbsp;&nbsp;Active&nbsp;=&nbsp;false;<br />&nbsp;&nbsp;Busy&nbsp;=&nbsp;false;<br />&nbsp;&nbsp;MakerId&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;DeviceId&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;FlashReset();<br />&nbsp;&nbsp;ReadId();<br />&nbsp;&nbsp;Test();<br />}<br /><br />void&nbsp;FlashObj::FlashReset(void)<br />{<br />&nbsp;&nbsp;Busy&nbsp;=&nbsp;true;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0xf0;<br />&nbsp;&nbsp;Wait(FLASH);<br />&nbsp;&nbsp;Busy&nbsp;=&nbsp;false;<br />}<br /><br />void&nbsp;FlashObj::ReadId(void)<br />{<br />&nbsp;&nbsp;Busy&nbsp;=&nbsp;true;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0x90;<br />&nbsp;&nbsp;Wait(FLASH);<br />&nbsp;&nbsp;MakerId&nbsp;=&nbsp;FLASH&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;DeviceId&nbsp;=&nbsp;FLASH&nbsp;&&nbsp;0xff;<br />//SST39VF800A&nbsp;MakerId=0xBF&nbsp;DeviceId=0x81&nbsp;<br />&nbsp;&nbsp;Active&nbsp;=&nbsp;(MakerId&nbsp;==&nbsp;0xBF)&nbsp;&&&nbsp;(DeviceId&nbsp;==&nbsp;0x81);<br />&nbsp;&nbsp;FlashReset();<br />&nbsp;&nbsp;Busy&nbsp;=&nbsp;false;<br />}<br /><br />void&nbsp;FlashObj::ChipErase(void)<br />{<br />&nbsp;&nbsp;Busy&nbsp;=&nbsp;true;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0x80;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0x10;<br />&nbsp;&nbsp;Wait(FLASH);<br />&nbsp;&nbsp;Busy&nbsp;=&nbsp;false;<br />}<br /><br />void&nbsp;FlashObj::SectorErase(unsigned&nbsp;int&nbsp;SectorNum)<br />{<br />&nbsp;&nbsp;Busy&nbsp;=&nbsp;true;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0x80;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0x30;<br />&nbsp;&nbsp;Wait(FLASH);<br />&nbsp;&nbsp;Busy&nbsp;=&nbsp;false;<br />}<br /><br />void&nbsp;FlashObj::BlockErase(unsigned&nbsp;int&nbsp;BlockNum)<br />{<br />&nbsp;&nbsp;Busy&nbsp;=&nbsp;true;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0x80;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0x50;<br />&nbsp;&nbsp;Wait(FLASH);<br />&nbsp;&nbsp;Busy&nbsp;=&nbsp;false;<br />}<br /><br />void&nbsp;FlashObj::Write(unsigned&nbsp;int&nbsp;&&nbsp;address,&nbsp;unsigned&nbsp;int&nbsp;val)<br />{<br />&nbsp;&nbsp;Busy&nbsp;=&nbsp;true;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH&nbsp;=&nbsp;0xa0;<br />&nbsp;&nbsp;address&nbsp;=&nbsp;val;<br />&nbsp;&nbsp;Wait(address);<br />&nbsp;&nbsp;Busy&nbsp;=&nbsp;false;<br />}<br /><br />void&nbsp;FlashObj::Wait(unsigned&nbsp;int&nbsp;&&nbsp;address)<br />{<br />unsigned&nbsp;int&nbsp;temp,&nbsp;val;<br />&nbsp;&nbsp;Busy&nbsp;=&nbsp;true;<br />&nbsp;&nbsp;do&nbsp;<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;_delay_loop_(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;val&nbsp;=&nbsp;address;<br />&nbsp;&nbsp;&nbsp;&nbsp;_delay_loop_(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;address;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;while(((val&nbsp;^&nbsp;temp)&nbsp;&&nbsp;BIT6)&nbsp;!=&nbsp;0);<br />&nbsp;&nbsp;Busy&nbsp;=&nbsp;false;<br />}<br /><br />void&nbsp;FlashObj::Test(void)&nbsp;<br />{<br />&nbsp;&nbsp;Busy&nbsp;=&nbsp;true;<br />&nbsp;&nbsp;if&nbsp;(Active)//SST39VF800A测试正常&nbsp;<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;FlashReset();<br />&nbsp;&nbsp;&nbsp;&nbsp;ChipErase();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;FlashReset();<br />&nbsp;&nbsp;&nbsp;&nbsp;Write(FLASH,&nbsp;0x1234);<br />&nbsp;&nbsp;&nbsp;&nbsp;Write(FLASH,&nbsp;0x1234);<br />&nbsp;&nbsp;&nbsp;&nbsp;Write(FLASH,&nbsp;0xabcd);<br />&nbsp;&nbsp;&nbsp;&nbsp;FlashReset();<br />&nbsp;&nbsp;&nbsp;&nbsp;SectorErase(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;FlashReset();<br />&nbsp;&nbsp;&nbsp;&nbsp;Write(FLASH,&nbsp;0x8888);<br />&nbsp;&nbsp;&nbsp;&nbsp;FlashReset();<br />&nbsp;&nbsp;&nbsp;&nbsp;BlockErase(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;Write(FLASH,&nbsp;0x6666);<br />&nbsp;&nbsp;&nbsp;&nbsp;FlashReset();<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;Busy&nbsp;=&nbsp;false;<br />}<br /><br />下图是在SST39VF800A上实现的&quot;FLASH二次写入&quot;图例https://bbs.21ic.com/upfiles/img/20076/2007620232653915.gif

hotpower 发表于 2008-5-5 23:35

点击下载Study-2812增强版上Verilog源码

https://bbs.21ic.com/upfiles/img/20076/2007620234958695.gif<br /> 相关链接:<a href='http://blog.**/hotpower/112664/message.aspx'>http://blog.**/hotpower/112664/message.aspx</a>

qjhu0433 发表于 2008-8-20 13:14

具有很好的演示效果,赞一个

hotpower 发表于 2011-5-13 01:24

这个是楼主
页: [1]
查看完整版本: DSP2812读写SST39VF800A之C++程序源码