/* ---------------------------------------------------------------------------- | |
* ATMEL Microcontroller Software Support | |
* ---------------------------------------------------------------------------- | |
* Copyright (c) 2009, Atmel Corporation | |
* | |
* All rights reserved. | |
* | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions are met: | |
* | |
* - Redistributions of source code must retain the above copyright notice, | |
* this list of conditions and the disclaimer below. | |
* | |
* Atmel's name may not be used to endorse or promote products derived from | |
* this software without specific prior written permission. | |
* | |
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR | |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE | |
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, | |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, | |
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | |
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
* ---------------------------------------------------------------------------- | |
*/ | |
//------------------------------------------------------------------------------ | |
/// \unit | |
/// | |
/// !Purpose | |
/// | |
/// Interface for configuration the Enhanced Embedded Flash Controller (EEFC) | |
/// peripheral. | |
/// | |
/// !Usage | |
/// | |
/// -# Enable/disable %flash ready interrupt sources using EFC_EnableFrdyIt() | |
/// and EFC_DisableFrdyIt(). | |
/// -# Translates the given address into which EEFC, page and offset values | |
/// for difference density %flash memory using EFC_TranslateAddress(). | |
/// -# Computes the address of a %flash access given the EFC, page and offset | |
/// for difference density %flash memory using EFC_ComputeAddress(). | |
/// -# Start the executing command with EFC_StartCommand() | |
/// -# Retrieve the current status of the EFC using EFC_GetStatus(). | |
/// -# Retrieve the result of the last executed command with EFC_GetResult(). | |
//------------------------------------------------------------------------------ | |
#ifndef EEFC_H | |
#define EEFC_H | |
//------------------------------------------------------------------------------ | |
// Headers | |
//------------------------------------------------------------------------------ | |
#include <board.h> | |
#if !defined (CHIP_FLASH_EEFC) | |
#error eefc not supported | |
#endif | |
//------------------------------------------------------------------------------ | |
// Constants | |
//------------------------------------------------------------------------------ | |
//------------------------------------------------------------------------------ | |
// Types | |
//------------------------------------------------------------------------------ | |
// Needed when EEFC is integrated in MC. | |
#if !defined(AT91C_BASE_EFC) && defined(AT91C_BASE_MC) | |
typedef struct _AT91S_EFC { | |
AT91_REG EFC_FMR; // EFC Flash Mode Register | |
AT91_REG EFC_FCR; // EFC Flash Command Register | |
AT91_REG EFC_FSR; // EFC Flash Status Register | |
AT91_REG EFC_FRR; // EFC Flash Result Register | |
AT91_REG EFC_FVR; // EFC Flash Version Register | |
} AT91S_EFC, *AT91PS_EFC; | |
#define AT91C_EFC_FRDY AT91C_MC_FRDY | |
#define AT91C_EFC_FWS AT91C_MC_FWS | |
#define AT91C_EFC_FWS_0WS AT91C_MC_FWS_0WS | |
#define AT91C_EFC_FWS_1WS AT91C_MC_FWS_1WS | |
#define AT91C_EFC_FWS_2WS AT91C_MC_FWS_2WS | |
#define AT91C_EFC_FWS_3WS AT91C_MC_FWS_3WS | |
#define AT91C_EFC_FCMD AT91C_MC_FCMD | |
#define AT91C_EFC_FCMD_GETD AT91C_MC_FCMD_GETD | |
#define AT91C_EFC_FCMD_WP AT91C_MC_FCMD_WP | |
#define AT91C_EFC_FCMD_WPL AT91C_MC_FCMD_WPL | |
#define AT91C_EFC_FCMD_EWP AT91C_MC_FCMD_EWP | |
#define AT91C_EFC_FCMD_EWPL AT91C_MC_FCMD_EWPL | |
#define AT91C_EFC_FCMD_EA AT91C_MC_FCMD_EA | |
#define AT91C_EFC_FCMD_EPL AT91C_MC_FCMD_EPL | |
#define AT91C_EFC_FCMD_EPA AT91C_MC_FCMD_EPA | |
#define AT91C_EFC_FCMD_SLB AT91C_MC_FCMD_SLB | |
#define AT91C_EFC_FCMD_CLB AT91C_MC_FCMD_CLB | |
#define AT91C_EFC_FCMD_GLB AT91C_MC_FCMD_GLB | |
#define AT91C_EFC_FCMD_SFB AT91C_MC_FCMD_SFB | |
#define AT91C_EFC_FCMD_CFB AT91C_MC_FCMD_CFB | |
#define AT91C_EFC_FCMD_GFB AT91C_MC_FCMD_GFB | |
#define AT91C_EFC_FARG AT91C_MC_FARG | |
#define AT91C_EFC_FKEY AT91C_MC_FKEY | |
#define AT91C_EFC_FRDY_S AT91C_MC_FRDY_S | |
#define AT91C_EFC_FCMDE AT91C_MC_FCMDE | |
#define AT91C_EFC_LOCKE AT91C_MC_LOCKE | |
#define AT91C_EFC_FVALUE AT91C_MC_FVALUE | |
#define AT91C_BASE_EFC (AT91_CAST(AT91PS_EFC) 0xFFFFFF60) | |
#endif //#if !defined(AT91C_BASE_EFC) && defined(AT91C_BASE_MC) | |
//------------------------------------------------------------------------------ | |
// Functions | |
//------------------------------------------------------------------------------ | |
extern void EFC_EnableFrdyIt(AT91S_EFC *pEfc); | |
extern void EFC_DisableFrdyIt(AT91S_EFC *pEfc); | |
extern void EFC_TranslateAddress( | |
AT91S_EFC **ppEfc, | |
unsigned int address, | |
unsigned short *pPage, | |
unsigned short *pOffset); | |
extern void EFC_ComputeAddress( | |
AT91S_EFC *pEfc, | |
unsigned short page, | |
unsigned short offset, | |
unsigned int *pAddress); | |
extern void EFC_StartCommand( | |
AT91S_EFC *pEfc, | |
unsigned char command, | |
unsigned short argument); | |
extern unsigned char EFC_PerformCommand( | |
AT91S_EFC *pEfc, | |
unsigned char command, | |
unsigned short argument); | |
extern unsigned int EFC_GetStatus(AT91S_EFC *pEfc); | |
extern unsigned int EFC_GetResult(AT91S_EFC *pEfc); | |
#endif //#ifndef EEFC_H | |