⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 self_programming.h

📁 AVR106 读写Flash程序空间的C函数
💻 H
字号:
// This file has been prepared for Doxygen automatic documentation generation.
/*! \file ********************************************************************
*
* Atmel Corporation
*
* - File              : Self_programming.h
* - Compiler          : IAR EWAVR 2.28a / 3.10c and newer
*
* - Support mail      : avr@atmel.com
*
* - Supported devices : All devices with bootloaders support.
*
* - AppNote           : AVR106 - C functions for reading and writing
*                       to flash memory.
*
* - 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:
*
*                       ReadFlashByte()	
*                       ReadFlashPage()	
*                       WriteFlashByte()
*                       WriteFlashPage()	
*                       RecoverFlash()	
*
*                       The remaining functions contained in this file are used
*                       by the functions listet above.
*
* $Revision: 2.0 $
* $Date: Wednesday, January 18, 2006 15:18:54 UTC $
*
*****************************************************************************/
#include <ioavr.h>

#ifndef __SELF_PROGRAMMING_H
#define __SELF_PROGRAMMING_H


/******************************************************************************
* Defines for configuration
******************************************************************************/

#define __FLASH_RECOVER       // This define enables FLASH buffering to avoid
                              // data loss if reset or power break when writing
#define ADR_FLASH_BUFFER 0    // Defines the FLASH page address used for buffering
                              // if enabeled. Will use Flash page 0 for buffering
#define ADR_LIMIT_LOW   0     // Defines the low address limit for FLASH write

#define BOOTSECTORSIZE 0x2000 // 4096 words
#define ADR_LIMIT_HIGH  FLASHEND-BOOTSECTORSIZE// Defines the high address limit for FLASH write

/******************************************************************************
* Definition of PAGESIZE
******************************************************************************/

#if defined(__ATtiny13__)   || defined(__AT90Tiny13__)   || \
    defined(__ATtiny2313__) || defined(__AT90Tiny2313__)
#define PAGESIZE 32
#endif

#if defined(__ATmega88__)   || defined(__AT90Mega88__)   || \
    defined(__ATmega48__)   || defined(__AT90Mega48__)   || \
    defined(__ATmega8__)    || defined(__AT90Mega8__)    || \
    defined(__ATmega8515__) || defined(__AT90Mega8515__) || \
    defined(__ATmega8535__) || defined(__AT90Mega8535__)
#define PAGESIZE 64
#endif

#if defined(__ATmega162__)  || defined(__AT90Mega162__)  || \
    defined(__ATmega163__)  || defined(__AT90Mega163__)  || \
    defined(__ATmega168__)  || defined(__AT90Mega168__)  || \
    defined(__ATmega169__)  || defined(__AT90Mega169__)  || \
    defined(__ATmega161__)  || defined(__AT90Mega161__)  || \
    defined(__ATmega16__)   || defined(__AT90Mega16__)   || \
    defined(__ATmega32__)   || defined(__AT90Mega32__)   || \
    defined(__ATmega323__)  || defined(__AT90Mega323__)  || \
    defined(__ATmega329__)  || defined(__AT90Mega329__)  || \
    defined(__ATmega3290__) || defined(__AT90Mega3290__)
#define PAGESIZE 128
#endif

#if defined(__ATmega64__)   || defined(__AT90Mega64__)   || \
    defined(__ATmega640__)  || defined(__AT90Mega640__)  || \
    defined(__ATmega649__)  || defined(__AT90Mega649__)  || \
    defined(__ATmega6490__) || defined(__AT90Mega6490__) || \
    defined(__ATmega128__)  || defined(__AT90Mega128__)  || \
    defined(__ATmega1280__) || defined(__AT90Mega1280__) || \
    defined(__ATmega1281__) || defined(__AT90Mega1281__) || \
    defined(__ATmega2560__) || defined(__AT90Mega2560__) || \
    defined(__ATmega2561__) || defined(__AT90Mega2561__)
#define PAGESIZE 256
#endif

/******************************************************************************
* Definition of datatypes
* All functions uses integer types for passing Flash addresses.
******************************************************************************/

#ifdef __HAS_ELPM__
typedef unsigned long MyAddressType;                  // Used for passing address to functions
typedef unsigned char __farflash* MyFlashCharPointer; // Used for reading Flash
typedef unsigned int __farflash* MyFlashIntPointer;  // Used for reading Flash
#else
typedef unsigned int  MyAddressType;                  // Used for passing address to functions
typedef unsigned char __flash* MyFlashCharPointer;    // Used for reading Flash
typedef unsigned int  __flash* MyFlashIntPointer;
#endif

/******************************************************************************
* Definition of SPM controll register. Labeled SPMCR on some devices, SPMSCR
* on others.
******************************************************************************/
#if defined(__ATmega16__)   || defined(__AT90Mega16__)   || \
    defined(__ATmega161__)  || defined(__AT90Mega161__)  || \
    defined(__ATmega162__)  || defined(__AT90Mega162__)  || \
    defined(__ATmega163__)  || defined(__AT90Mega163__)  || \
    defined(__ATmega32__)   || defined(__AT90Mega32__)   || \
    defined(__ATmega323__)  || defined(__ATMega323__)    || \
    defined(__ATmega64__)   || defined(__AT90Mega64__)   || \
    defined(__ATmega8__)    || defined(__AT90Mega8__)    || \
    defined(__ATmega8535__) || defined(__AT90Mega8535__) || \
    defined(__ATmega8515__) || defined(__AT90Mega8515__)
#define SPMControllRegister SPMCR
#else
#define SPMControllRegister SPMCSR
#endif

/******************************************************************************
* Other defines
******************************************************************************/

#define FLASH_BUFFER_FULL_ID  0xAA
#define TRUE 1
#define FALSE 0

/******************************************************************************
* Function prototypes
******************************************************************************/

/* User functions */
unsigned char ReadFlashByte(MyAddressType flashAdr);
unsigned char ReadFlashPage(MyAddressType flashStartAdr, unsigned char *dataPage);
unsigned char WriteFlashByte(MyAddressType flashAddr, unsigned char data);
unsigned char WriteFlashPage(MyAddressType flashStartAdr, unsigned char *dataPage);
unsigned char RecoverFlash();

/* Functions used by user functions */
unsigned char AddressCheck(MyAddressType flashAdr);
void WriteBufToFlash(MyAddressType flashStartAdr);
void LpmReplaceSpm(MyAddressType flashAddr, unsigned char data);

#endif /* End if __BOOT_FUNC_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -