Self_programming.h

Go to the documentation of this file.
00001 // This file has been prepared for Doxygen automatic documentation generation.
00033 #include <ioavr.h>
00034 
00035 #ifndef __SELF_PROGRAMMING_H
00036 #define __SELF_PROGRAMMING_H
00037 
00038 
00039 /******************************************************************************
00040 * Defines for configuration
00041 ******************************************************************************/
00042 
00043 #define __FLASH_RECOVER       // This define enables FLASH buffering to avoid
00044                               // data loss if reset or power break when writing
00045 #define ADR_FLASH_BUFFER 0    // Defines the FLASH page address used for buffering
00046                               // if enabeled. Will use Flash page 0 for buffering
00047 #define ADR_LIMIT_LOW   0     // Defines the low address limit for FLASH write
00048 
00049 #define BOOTSECTORSIZE 0x2000 // 4096 words
00050 #define ADR_LIMIT_HIGH  FLASHEND-BOOTSECTORSIZE// Defines the high address limit for FLASH write
00051 
00052 /******************************************************************************
00053 * Definition of PAGESIZE
00054 ******************************************************************************/
00055 
00056 #if defined(__ATtiny13__)   || defined(__AT90Tiny13__)   || \
00057     defined(__ATtiny2313__) || defined(__AT90Tiny2313__)
00058 #define PAGESIZE 32
00059 #endif
00060 
00061 #if defined(__ATmega88__)   || defined(__AT90Mega88__)   || \
00062     defined(__ATmega48__)   || defined(__AT90Mega48__)   || \
00063     defined(__ATmega8__)    || defined(__AT90Mega8__)    || \
00064     defined(__ATmega8515__) || defined(__AT90Mega8515__) || \
00065     defined(__ATmega8535__) || defined(__AT90Mega8535__)
00066 #define PAGESIZE 64
00067 #endif
00068 
00069 #if defined(__ATmega162__)  || defined(__AT90Mega162__)  || \
00070     defined(__ATmega163__)  || defined(__AT90Mega163__)  || \
00071     defined(__ATmega168__)  || defined(__AT90Mega168__)  || \
00072     defined(__ATmega169__)  || defined(__AT90Mega169__)  || \
00073     defined(__ATmega161__)  || defined(__AT90Mega161__)  || \
00074     defined(__ATmega16__)   || defined(__AT90Mega16__)   || \
00075     defined(__ATmega32__)   || defined(__AT90Mega32__)   || \
00076     defined(__ATmega323__)  || defined(__AT90Mega323__)  || \
00077     defined(__ATmega329__)  || defined(__AT90Mega329__)  || \
00078     defined(__ATmega3290__) || defined(__AT90Mega3290__)
00079 #define PAGESIZE 128
00080 #endif
00081 
00082 #if defined(__ATmega64__)   || defined(__AT90Mega64__)   || \
00083     defined(__ATmega640__)  || defined(__AT90Mega640__)  || \
00084     defined(__ATmega649__)  || defined(__AT90Mega649__)  || \
00085     defined(__ATmega6490__) || defined(__AT90Mega6490__) || \
00086     defined(__ATmega128__)  || defined(__AT90Mega128__)  || \
00087     defined(__ATmega1280__) || defined(__AT90Mega1280__) || \
00088     defined(__ATmega1281__) || defined(__AT90Mega1281__) || \
00089     defined(__ATmega2560__) || defined(__AT90Mega2560__) || \
00090     defined(__ATmega2561__) || defined(__AT90Mega2561__)
00091 #define PAGESIZE 256
00092 #endif
00093 
00094 /******************************************************************************
00095 * Definition of datatypes
00096 * All functions uses integer types for passing Flash addresses.
00097 ******************************************************************************/
00098 
00099 #ifdef __HAS_ELPM__
00100 typedef unsigned long MyAddressType;                  // Used for passing address to functions
00101 typedef unsigned char __farflash* MyFlashCharPointer; // Used for reading Flash
00102 typedef unsigned int __farflash* MyFlashIntPointer;  // Used for reading Flash
00103 #else
00104 typedef unsigned int  MyAddressType;                  // Used for passing address to functions
00105 typedef unsigned char __flash* MyFlashCharPointer;    // Used for reading Flash
00106 typedef unsigned int  __flash* MyFlashIntPointer;
00107 #endif
00108 
00109 /******************************************************************************
00110 * Definition of SPM controll register. Labeled SPMCR on some devices, SPMSCR
00111 * on others.
00112 ******************************************************************************/
00113 #if defined(__ATmega16__)   || defined(__AT90Mega16__)   || \
00114     defined(__ATmega161__)  || defined(__AT90Mega161__)  || \
00115     defined(__ATmega162__)  || defined(__AT90Mega162__)  || \
00116     defined(__ATmega163__)  || defined(__AT90Mega163__)  || \
00117     defined(__ATmega32__)   || defined(__AT90Mega32__)   || \
00118     defined(__ATmega323__)  || defined(__ATMega323__)    || \
00119     defined(__ATmega64__)   || defined(__AT90Mega64__)   || \
00120     defined(__ATmega8__)    || defined(__AT90Mega8__)    || \
00121     defined(__ATmega8535__) || defined(__AT90Mega8535__) || \
00122     defined(__ATmega8515__) || defined(__AT90Mega8515__)
00123 #define SPMControllRegister SPMCR
00124 #else
00125 #define SPMControllRegister SPMCSR
00126 #endif
00127 
00128 /******************************************************************************
00129 * Other defines
00130 ******************************************************************************/
00131 
00132 #define FLASH_BUFFER_FULL_ID  0xAA
00133 #define TRUE 1
00134 #define FALSE 0
00135 
00136 /******************************************************************************
00137 * Function prototypes
00138 ******************************************************************************/
00139 
00140 /* User functions */
00141 unsigned char ReadFlashByte(MyAddressType flashAdr);
00142 unsigned char ReadFlashPage(MyAddressType flashStartAdr, unsigned char *dataPage);
00143 unsigned char WriteFlashByte(MyAddressType flashAddr, unsigned char data);
00144 unsigned char WriteFlashPage(MyAddressType flashStartAdr, unsigned char *dataPage);
00145 unsigned char RecoverFlash();
00146 
00147 /* Functions used by user functions */
00148 unsigned char AddressCheck(MyAddressType flashAdr);
00149 void WriteBufToFlash(MyAddressType flashStartAdr);
00150 void LpmReplaceSpm(MyAddressType flashAddr, unsigned char data);
00151 
00152 #endif /* End if __BOOT_FUNC_H */

Generated on Wed Jan 18 16:19:21 2006 for AVR106 - C Functions for Reading and Writing to Flash Memory by  doxygen 1.4.5