📄 self__programming_8c.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>AVR106 - C Functions for Reading and Writing to Flash Memory: Self_programming.c File Reference</title><link href="doxygen.css" rel="stylesheet" type="text/css"><link href="tabs.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.4.5 --><div class="tabs"> <ul> <li><a href="main.html"><span>Main Page</span></a></li> <li id="current"><a href="files.html"><span>Files</span></a></li> </ul></div><div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>Globals</span></a></li> </ul></div><h1>Self_programming.c File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>Atmel Corporation<p><ul><li>File : <a class="el" href="Self__programming_8c.html">Self_programming.c</a></li><li>Compiler : IAR EWAVR 2.28a / 3.10c and newer</li></ul><p><ul><li>Support mail : <a href="mailto:avr@atmel.com">avr@atmel.com</a></li></ul><p><ul><li>Supported devices : All devices with bootloaders support.</li></ul><p><ul><li>AppNote : AVR106 - C functions for reading and writing to flash memory.</li></ul><p><ul><li>Description : The file contains functions for easy reading and writing of Flash memory on parts having the "Self-programming" feature. The user functions are as follows:</li></ul><p><a class="el" href="Self__programming_8c.html#1d6ded0de0674f00a82507424c862431">ReadFlashByte()</a> <a class="el" href="Self__programming_8c.html#8b290614a2b685c107c6eed5a9db96d4">ReadFlashPage()</a> <a class="el" href="Self__programming_8c.html#37868fe819d4b22e28890f3c0d3797fa">WriteFlashByte()</a> <a class="el" href="Self__programming_8c.html#fc13c9dcc9565c691d73a8e35ea3c3b0">WriteFlashPage()</a> <a class="el" href="Self__programming_8c.html#dab3fc05882b5f5511a24d423119e003">RecoverFlash()</a><p>The remaining functions contained in this file are used by the functions listet above.<p><dl compact><dt><b>Revision</b></dt><dd>2.0 </dd></dl><dl compact><dt><b>Date</b></dt><dd>Wednesday, January 18, 2006 15:18:52 UTC </dd></dl><p>Definition in file <a class="el" href="Self__programming_8c-source.html">Self_programming.c</a>.<p><code>#include <ioavr.h></code><br><code>#include <inavr.h></code><br><code>#include "<a class="el" href="Self__programming_8h-source.html">Self_programming.h</a>"</code><br><p>Include dependency graph for Self_programming.c:<p><center><img src="Self__programming_8c__incl.png" border="0" usemap="#Self_programming.c_map" alt=""></center><map name="Self_programming.c_map"><area href="Self__programming_8h-source.html" shape="rect" coords="199,108,343,135" alt=""></map><p><a href="Self__programming_8c-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0"><tr><td></td></tr><tr><td colspan="2"><br><h2>Functions</h2></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="Self__programming_8c.html#968efe3412fbf2252905db9c760c6aff">AddressCheck</a> (<a class="el" href="Self__programming_8h.html#b6f1b2644de7b0bfdbda193929167b4a">MyAddressType</a> flashAdr)</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="Self__programming_8c.html#6c0d2f39df7714f493c214ed2ec42493">LpmReplaceSpm</a> (<a class="el" href="Self__programming_8h.html#b6f1b2644de7b0bfdbda193929167b4a">MyAddressType</a> flashAddr, unsigned char data)</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="Self__programming_8c.html#1d6ded0de0674f00a82507424c862431">ReadFlashByte</a> (<a class="el" href="Self__programming_8h.html#b6f1b2644de7b0bfdbda193929167b4a">MyAddressType</a> flashStartAdr)</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="Self__programming_8c.html#8b290614a2b685c107c6eed5a9db96d4">ReadFlashPage</a> (<a class="el" href="Self__programming_8h.html#b6f1b2644de7b0bfdbda193929167b4a">MyAddressType</a> flashStartAdr, unsigned char *dataPage)</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="Self__programming_8c.html#dab3fc05882b5f5511a24d423119e003">RecoverFlash</a> ()</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="Self__programming_8c.html#d29e91755e1d3695b74c15e89019db39">WriteBufToFlash</a> (<a class="el" href="Self__programming_8h.html#b6f1b2644de7b0bfdbda193929167b4a">MyAddressType</a> flashStartAdr)</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="Self__programming_8c.html#37868fe819d4b22e28890f3c0d3797fa">WriteFlashByte</a> (<a class="el" href="Self__programming_8h.html#b6f1b2644de7b0bfdbda193929167b4a">MyAddressType</a> flashAddr, unsigned char data)</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="Self__programming_8c.html#fc13c9dcc9565c691d73a8e35ea3c3b0">WriteFlashPage</a> (<a class="el" href="Self__programming_8h.html#b6f1b2644de7b0bfdbda193929167b4a">MyAddressType</a> flashStartAdr, unsigned char *dataPage)</td></tr><tr><td colspan="2"><br><h2>Variables</h2></td></tr><tr><td class="memItemLeft" nowrap>struct {</td></tr><tr><td class="memItemLeft" nowrap> unsigned int <a class="el" href="Self__programming_8c.html#37762d11479e633bc60b4d306ebffa55">pageNumber</a></td></tr><tr><td class="memItemLeft" nowrap> unsigned char <a class="el" href="Self__programming_8c.html#9acb44549b41563697bb490144ec6258">status</a></td></tr><tr><td class="memItemLeft" nowrap valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="Self__programming_8c.html#e43874319c89f039d4c684ca71e3cc89">FlashBackup</a></td></tr></table><hr><h2>Function Documentation</h2><a class="anchor" name="968efe3412fbf2252905db9c760c6aff"></a><!-- doxytag: member="Self_programming.c::AddressCheck" ref="968efe3412fbf2252905db9c760c6aff" args="(MyAddressType flashAdr)" --><p><table class="mdTable" cellpadding="2" cellspacing="0"> <tr> <td class="mdRow"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top">unsigned char AddressCheck </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top"><a class="el" href="Self__programming_8h.html#b6f1b2644de7b0bfdbda193929167b4a">MyAddressType</a> </td> <td class="mdname1" valign="top" nowrap> <em>flashAdr</em> </td> <td class="md" valign="top"> ) </td> <td class="md" nowrap></td> </tr> </table> </td> </tr></table><table cellspacing="5" cellpadding="0" border="0"> <tr> <td> </td> <td><p>The function checks if input argument is a valid Flash page address for writing. Returns TRUE only if:<ul><li>Address points to the beginning of a Flash page</li><li>Address is within the limits defined in <a class="el" href="Self__programming_8h.html">Self_programming.h</a></li><li>Address is not equal to page address used for buffring by the Flash recovery functions (if enabled). Returns FALSE else. </li></ul><p>Definition at line <a class="el" href="Self__programming_8c-source.html#l00207">207</a> of file <a class="el" href="Self__programming_8c-source.html">Self_programming.c</a>.<p>References <a class="el" href="Self__programming_8h-source.html#l00045">ADR_FLASH_BUFFER</a>, <a class="el" href="Self__programming_8h-source.html#l00050">ADR_LIMIT_HIGH</a>, <a class="el" href="Self__programming_8h-source.html#l00047">ADR_LIMIT_LOW</a>, <a class="el" href="Self__programming_8h-source.html#l00134">FALSE</a>, and <a class="el" href="Self__programming_8h-source.html#l00133">TRUE</a>.<p>Referenced by <a class="el" href="Self__programming_8c-source.html#l00082">WriteFlashByte()</a>, and <a class="el" href="Self__programming_8c-source.html#l00130">WriteFlashPage()</a>.<div class="fragment"><pre class="fragment"><a name="l00207"></a>00207 {<a name="l00208"></a>00208 <span class="preprocessor"> #ifdef __FLASH_RECOVER</span><a name="l00209"></a>00209 <span class="preprocessor"></span> <span class="comment">// The next line gives a warning 'pointless comparison with zero' if ADR_LIMIT_LOW is 0. Ignore it.</span><a name="l00210"></a>00210 <span class="keywordflow">if</span>( (flashAdr >= <a class="code" href="Self__programming_8h.html#53e0ab773e1383596056656041ceb630">ADR_LIMIT_LOW</a>) && (flashAdr <= <a class="code" href="Self__programming_8h.html#356b068aabf148d88bb44104bd07f6de">ADR_LIMIT_HIGH</a>) &&<a name="l00211"></a>00211 (flashAdr != <a class="code" href="Self__programming_8h.html#7344bf2129730480f9e46fb7f2cb1ceb">ADR_FLASH_BUFFER</a>) && !(flashAdr & (PAGESIZE-1)) )<a name="l00212"></a>00212 <span class="keywordflow">return</span> <a class="code" href="Self__programming_8h.html#c0d83f0b82a6b30de8811e69e6d95c61">TRUE</a>; <span class="comment">// Address is a valid page address</span><a name="l00213"></a>00213 <span class="keywordflow">else</span><a name="l00214"></a>00214 <span class="keywordflow">return</span> <a class="code" href="Self__programming_8h.html#946003f97ccc52d5d3b54ac0ec31bbfc">FALSE</a>; <span class="comment">// Address is not a valid page address</span><a name="l00215"></a>00215 #<span class="keywordflow">else</span><a name="l00216"></a>00216 <span class="keywordflow">if</span>((flashAdr >= <a class="code" href="Self__programming_8h.html#53e0ab773e1383596056656041ceb630">ADR_LIMIT_LOW</a>) && (flashAdr <= <a class="code" href="Self__programming_8h.html#356b068aabf148d88bb44104bd07f6de">ADR_LIMIT_HIGH</a>) && !(flashAdr & (PAGESIZE-1) ) )<a name="l00217"></a>00217 <span class="keywordflow">return</span> <a class="code" href="Self__programming_8h.html#c0d83f0b82a6b30de8811e69e6d95c61">TRUE</a>; <span class="comment">// Address is a valid page address</span><a name="l00218"></a>00218 <span class="keywordflow">else</span><a name="l00219"></a>00219 <span class="keywordflow">return</span> <a class="code" href="Self__programming_8h.html#946003f97ccc52d5d3b54ac0ec31bbfc">FALSE</a>; <span class="comment">// Address is not a valid page address</span><a name="l00220"></a>00220 <span class="preprocessor"> #endif</span><a name="l00221"></a>00221 <span class="preprocessor"></span>}</pre></div><p> </td> </tr></table><a class="anchor" name="6c0d2f39df7714f493c214ed2ec42493"></a><!-- doxytag: member="Self_programming.c::LpmReplaceSpm" ref="6c0d2f39df7714f493c214ed2ec42493" args="(MyAddressType flashAddr, unsigned char data)" --><p><table class="mdTable" cellpadding="2" cellspacing="0"> <tr> <td class="mdRow"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top">void LpmReplaceSpm </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top"><a class="el" href="Self__programming_8h.html#b6f1b2644de7b0bfdbda193929167b4a">MyAddressType</a> </td> <td class="mdname" nowrap> <em>flashAddr</em>, </td> </tr> <tr> <td class="md" nowrap align="right"></td> <td class="md"></td> <td class="md" nowrap>unsigned char </td> <td class="mdname" nowrap> <em>data</em></td> </tr> <tr> <td class="md"></td> <td class="md">) </td> <td class="md" colspan="2"></td> </tr> </table> </td> </tr></table><table cellspacing="5" cellpadding="0" border="0"> <tr> <td> </td> <td>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -