eeprom 的页写算法

[复制链接]
2661|1
 楼主| yellowland 发表于 2008-2-25 16:07 | 显示全部楼层 |阅读模式
eeprom&nbsp;的写操作比较费时,页写的效率要比字节高,但是页写需要控制地址卷页(roll),这里给出一个简单算法,欢迎讨论,希望有更简单的.<br />//**************************************************************<br />//&nbsp;&nbsp;&nbsp;Function:&nbsp;eeprom_prg_page<br />//&nbsp;&nbsp;&nbsp;Programmer:ASTEC&nbsp;CHINA<br />//&nbsp;&nbsp;&nbsp;Description:a&nbsp;simple&nbsp;page&nbsp;edge&nbsp;detect&nbsp;algorithm&nbsp;for&nbsp;page&nbsp;write&nbsp;of&nbsp;at24c02.&nbsp;<br />//&nbsp;&nbsp;&nbsp;input&nbsp;para:<br />//&nbsp;&nbsp;&nbsp;&nbsp;*data:&nbsp;&nbsp;write&nbsp;data&nbsp;pointer<br />//&nbsp;&nbsp;&nbsp;&nbsp;addr:&nbsp;&nbsp;&nbsp;eeprom&nbsp;address<br />//&nbsp;&nbsp;&nbsp;&nbsp;numb:&nbsp;&nbsp;&nbsp;write&nbsp;byte&nbsp;length<br />//&nbsp;&nbsp;&nbsp;output&nbsp;para:&nbsp;none<br />//&nbsp;&nbsp;&nbsp;modify&nbsp;history:&nbsp;12/11/06&nbsp;initia<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13//11/06&nbsp;test&nbsp;pass&nbsp;&nbsp;<br />//**************************************************************<br /><br />void&nbsp;ext_eep_prg(unsigned&nbsp;char&nbsp;*data,&nbsp;unsigned&nbsp;int&nbsp;addr,unsigned&nbsp;char&nbsp;numb)<br />{<br />&nbsp;static&nbsp;&nbsp;unsigned&nbsp;char&nbsp;nlength,&nbsp;nlength_offset;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;if(addr%8==0)&nbsp;//addr=n*8?<br />&nbsp;{&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;if(numb&lt=8)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;nlength=numb;<br />&nbsp;&nbsp;&nbsp;I2C_write_page(addr,data,nlength);<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;else<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nlength=numb&gt&gt3;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nlength_offset=&nbsp;numb%8;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(nlength--)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2C_write_page(addr,data,8);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addr=addr+8;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data=data+8;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(nlength_offset&gt0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2C_write_page(addr,data,nlength_offset);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;}&nbsp;<br />&nbsp;else<br />&nbsp;{<br />&nbsp;&nbsp;nlength=8-(addr%8);<br />&nbsp;&nbsp;if(numb&lt=nlength)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;nlength=numb;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2C_write_page(addr,data,nlength);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;else<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;I2C_write_page(addr,data,nlength);<br />&nbsp;&nbsp;&nbsp;&nbsp;addr=addr+nlength;<br />&nbsp;&nbsp;&nbsp;&nbsp;data=data+nlength;<br />&nbsp;&nbsp;&nbsp;&nbsp;numb=numb-nlength;<br />&nbsp;&nbsp;&nbsp;&nbsp;nlength=numb&gt&gt3;<br />&nbsp;&nbsp;&nbsp;&nbsp;nlength_offset=&nbsp;numb%8;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(nlength--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2C_write_page(addr,data,8);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addr=addr+8;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data=data+8;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if(nlength_offset&gt0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2C_write_page(addr,data,nlength_offset);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;}<br /><br />&nbsp;}<br />&nbsp;__RESET_WATCHDOG();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;//&nbsp;wreeprom_exit_flag=1;&nbsp;&nbsp;<br />}
free_tech 发表于 2008-2-28 09:50 | 显示全部楼层

请楼主到我们的网站上写博客

请楼主把好的程序算发写成博客,大家共享<br /><br />www.myhcs08.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

26

帖子

0

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