/* ---------------------------------------------------------------------------- * 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 #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