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

[复制链接]
 楼主| hotpower 发表于 2008-5-5 23:11 | 显示全部楼层 |阅读模式
/*-----------------------------------------------------<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[0x5555]&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[0x2AAA]&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[0x5555]&nbsp;=&nbsp;0xf0;<br />&nbsp;&nbsp;Wait(FLASH[0x5555]);<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[0x5555]&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[0x2AAA]&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[0x5555]&nbsp;=&nbsp;0x90;<br />&nbsp;&nbsp;Wait(FLASH[0x5555]);<br />&nbsp;&nbsp;MakerId&nbsp;=&nbsp;FLASH[0x0000]&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;DeviceId&nbsp;=&nbsp;FLASH[0x0001]&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[0x5555]&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[0x2AAA]&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[0x5555]&nbsp;=&nbsp;0x80;<br />&nbsp;&nbsp;FLASH[0x5555]&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[0x2AAA]&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[0x5555]&nbsp;=&nbsp;0x10;<br />&nbsp;&nbsp;Wait(FLASH[0x5555]);<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[0x5555]&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[0x2AAA]&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[0x5555]&nbsp;=&nbsp;0x80;<br />&nbsp;&nbsp;FLASH[0x5555]&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[0x2AAA]&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[SectorSize&nbsp;*&nbsp;SectorNum]&nbsp;=&nbsp;0x30;<br />&nbsp;&nbsp;Wait(FLASH[0x5555]);<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[0x5555]&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[0x2AAA]&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[0x5555]&nbsp;=&nbsp;0x80;<br />&nbsp;&nbsp;FLASH[0x5555]&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[0x2AAA]&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[BlockSize&nbsp;*&nbsp;BlockNum]&nbsp;=&nbsp;0x50;<br />&nbsp;&nbsp;Wait(FLASH[0x5555]);<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[0x5555]&nbsp;=&nbsp;0xaa;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[0x2AAA]&nbsp;=&nbsp;0x55;&nbsp;&nbsp;<br />&nbsp;&nbsp;FLASH[0x5555]&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[0x0000],&nbsp;0x1234);<br />&nbsp;&nbsp;&nbsp;&nbsp;Write(FLASH[0x5555],&nbsp;0x1234);<br />&nbsp;&nbsp;&nbsp;&nbsp;Write(FLASH[0x2aaa],&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[0x0000],&nbsp;0x8888);<br />&nbsp;&nbsp;&nbsp;&nbsp;FlashReset();<br />&nbsp;&nbsp;&nbsp;&nbsp;BlockErase(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;Write(FLASH[0x0000],&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;图例
 楼主| hotpower 发表于 2008-5-5 23:35 | 显示全部楼层

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

<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 | 显示全部楼层
这个是楼主
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1460

主题

21619

帖子

508

粉丝
快速回复 在线客服 返回列表 返回顶部