1 /* ----------------------------------------------------------------------------
\r
2 * ATMEL Microcontroller Software Support
\r
3 * ----------------------------------------------------------------------------
\r
4 * Copyright (c) 2008, Atmel Corporation
\r
6 * All rights reserved.
\r
8 * Redistribution and use in source and binary forms, with or without
\r
9 * modification, are permitted provided that the following conditions are met:
\r
11 * - Redistributions of source code must retain the above copyright notice,
\r
12 * this list of conditions and the disclaimer below.
\r
14 * Atmel's name may not be used to endorse or promote products derived from
\r
15 * this software without specific prior written permission.
\r
17 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
\r
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
\r
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
\r
20 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
\r
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
\r
22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
\r
23 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
\r
24 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
\r
25 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
\r
26 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\r
27 * ----------------------------------------------------------------------------
\r
33 //------------------------------------------------------------------------------
\r
35 //------------------------------------------------------------------------------
\r
39 #ifdef BOARD_FLASH_EFC
\r
41 //------------------------------------------------------------------------------
\r
43 //------------------------------------------------------------------------------
\r
45 /// Number of GPNVMs available on each chip.
\r
46 #if defined(at91sam7s16) || defined(at91sam7s161) || defined(at91sam7s32) \
\r
47 || defined(at91sam7s321) || defined(at91sam7s64) || defined(at91sam7s128) \
\r
48 || defined(at91sam7s256) || defined(at91sam7s512)
\r
50 #define EFC_NUM_GPNVMS 2
\r
52 #elif defined(at91sam7se32) || defined(at91sam7se256) || defined(at91sam7se512) \
\r
53 || defined(at91sam7x128) || defined(at91sam7x256) || defined(at91sam7x512) \
\r
54 || defined(at91sam7xc128) || defined(at91sam7xc256) || defined(at91sam7xc512) \
\r
56 #define EFC_NUM_GPNVMS 3
\r
58 #elif defined(at91sam7a3)
\r
60 #define EFC_NUM_GPNVMS 0
\r
63 // Missing FRDY bit for SAM7A3
\r
64 #if defined(at91sam7a3)
\r
65 #define AT91C_MC_FRDY (AT91C_MC_EOP | AT91C_MC_EOL)
\r
68 // No security bit on SAM7A3
\r
69 #if defined(at91sam7a3)
\r
70 #define EFC_NO_SECURITY_BIT
\r
73 //------------------------------------------------------------------------------
\r
75 //------------------------------------------------------------------------------
\r
77 // For chips which do not define AT91S_EFC
\r
78 #if !defined(AT91C_BASE_EFC) && !defined(AT91C_BASE_EFC0)
\r
79 typedef struct _AT91S_EFC {
\r
85 } AT91S_EFC, *AT91PS_EFC;
\r
86 #define AT91C_BASE_EFC (AT91_CAST(AT91PS_EFC) 0xFFFFFF60)
\r
89 //------------------------------------------------------------------------------
\r
91 //------------------------------------------------------------------------------
\r
93 extern void EFC_SetMasterClock(unsigned int mck);
\r
95 extern void EFC_EnableIt(AT91S_EFC *pEfc, unsigned int sources);
\r
97 extern void EFC_DisableIt(AT91S_EFC *pEfc, unsigned int sources);
\r
99 extern void EFC_SetEraseBeforeProgramming(AT91S_EFC *pEfc, unsigned char enable);
\r
101 extern void EFC_TranslateAddress(
\r
102 unsigned int address,
\r
104 unsigned short *pPage,
\r
105 unsigned short *pOffset);
\r
107 extern void EFC_ComputeAddress(
\r
109 unsigned short page,
\r
110 unsigned short offset,
\r
111 unsigned int *pAddress);
\r
113 extern void EFC_StartCommand(
\r
115 unsigned char command,
\r
116 unsigned short argument);
\r
118 extern unsigned char EFC_PerformCommand(
\r
120 unsigned char command,
\r
121 unsigned short argument);
\r
123 extern unsigned int EFC_GetStatus(AT91S_EFC *pEfc);
\r
125 #endif //#ifdef BOARD_FLASH_EFC
\r
126 #endif //#ifndef EFC_H
\r