2 * @brief EEPROM registers and driver functions
5 * Copyright(C) NXP Semiconductors, 2012
9 * Software that is described herein is for illustrative purposes only
10 * which provides customers with programming information regarding the
11 * LPC products. This software is supplied "AS IS" without any warranties of
12 * any kind, and NXP Semiconductors and its licensor disclaim any and
13 * all warranties, express or implied, including all implied warranties of
14 * merchantability, fitness for a particular purpose and non-infringement of
15 * intellectual property rights. NXP Semiconductors assumes no responsibility
16 * or liability for the use of the software, conveys no license or rights under any
17 * patent, copyright, mask work right, or any other intellectual property rights in
18 * or to any products. NXP Semiconductors reserves the right to make changes
19 * in the software without notification. NXP Semiconductors also makes no
20 * representation or warranty that such application will be suitable for the
21 * specified use without further testing or modification.
24 * Permission to use, copy, modify, and distribute this software and its
25 * documentation is hereby granted, under NXP Semiconductors' and its
26 * licensor's relevant copyrights in the software, without fee, provided that it
27 * is used in conjunction with NXP Semiconductors microcontrollers. This
28 * copyright, permission, and disclaimer notice must appear in all copies of
32 #ifndef __EEPROM_002_H_
33 #define __EEPROM_002_H_
35 #include "sys_config.h"
42 /** @defgroup IP_EEPROM_002 IP: EEPROM register block and driver (002)
48 * @brief EEPROM register block structure
50 typedef struct { /* EEPROM Structure */
51 __IO uint32_t CMD; /*!< EEPROM command register */
53 __IO uint32_t RWSTATE; /*!< EEPROM read wait state register */
54 __IO uint32_t AUTOPROG; /*!< EEPROM auto programming register */
55 __IO uint32_t WSTATE; /*!< EEPROM wait state register */
56 __IO uint32_t CLKDIV; /*!< EEPROM clock divider register */
57 __IO uint32_t PWRDWN; /*!< EEPROM power-down register */
58 uint32_t RESERVED2[1007];
59 __O uint32_t INTENCLR; /*!< EEPROM interrupt enable clear */
60 __O uint32_t INTENSET; /*!< EEPROM interrupt enable set */
61 __I uint32_t INTSTAT; /*!< EEPROM interrupt status */
62 __I uint32_t INTEN; /*!< EEPROM interrupt enable */
63 __O uint32_t INTSTATCLR; /*!< EEPROM interrupt status clear */
64 __O uint32_t INTSTATSET; /*!< EEPROM interrupt status set */
68 * @brief Macro defines for EEPROM command register
70 #define EEPROM_CMD_ERASE_PRG_PAGE (6) /*!< EEPROM erase/program command */
73 * @brief Macro defines for EEPROM Auto Programming register
75 #define EEPROM_AUTOPROG_OFF (0) /*!<Auto programming off */
76 #define EEPROM_AUTOPROG_AFT_1WORDWRITTEN (1) /*!< Erase/program cycle is triggered after 1 word is written */
77 #define EEPROM_AUTOPROG_AFT_LASTWORDWRITTEN (2) /*!< Erase/program cycle is triggered after a write to AHB
78 address ending with ......1111100 (last word of a page) */
81 * @brief Macro defines for EEPROM power down register
83 #define EEPROM_PWRDWN (1 << 0)
86 * @brief Macro defines for EEPROM interrupt related registers
88 #define EEPROM_INT_ENDOFPROG (1 << 2)
91 * @brief Select an EEPROM command
92 * @param pEEPROM : pointer to EEPROM peripheral block
93 * @param cmd : EEPROM command.
95 * @note cmd is or-ed bits value of EEPROM_CMD_*
97 STATIC INLINE void IP_EEPROM_SetCmd(IP_EEPROM_002_T *pEEPROM, uint32_t cmd)
103 * @brief Set Auto programming mode
104 * @param pEEPROM : pointer to EEPROM peripheral block
105 * @param mode : Auto programming Mode (Value of EEPROM_AUTOPROG_).
108 STATIC INLINE void IP_EEPROM_SetAutoProg(IP_EEPROM_002_T *pEEPROM, uint32_t mode)
110 pEEPROM->AUTOPROG = mode;
114 * @brief Set EEPROM Read Wait State value
115 * @param pEEPROM : pointer to EEPROM peripheral block
116 * @param ws : Wait State value.
119 STATIC INLINE void IP_EEPROM_SetReadWaitState(IP_EEPROM_002_T *pEEPROM, uint32_t ws)
121 pEEPROM->RWSTATE = ws;
125 * @brief Set EEPROM Wait State value
126 * @param pEEPROM : pointer to EEPROM peripheral block
127 * @param ws : Wait State value.
130 STATIC INLINE void IP_EEPROM_SetWaitState(IP_EEPROM_002_T *pEEPROM, uint32_t ws)
132 pEEPROM->WSTATE = ws;
136 * @brief Put EEPROM device in power down mode
137 * @param pEEPROM : pointer to EEPROM peripheral block
140 STATIC INLINE void IP_EEPROM_EnablePowerDown(IP_EEPROM_002_T *pEEPROM)
142 pEEPROM->PWRDWN = EEPROM_PWRDWN;
146 * @brief Bring EEPROM device out of power down mode
147 * @param pEEPROM : pointer to EEPROM peripheral block
149 * @note Any EEPROM operation has to be suspended for 100us while the EEPROM wakes up.
151 STATIC INLINE void IP_EEPROM_DisablePowerDown(IP_EEPROM_002_T *pEEPROM)
157 * @brief Enable EEPROM interrupt
158 * @param pEEPROM : pointer to EEPROM peripheral block
159 * @param mask : interrupt mask (or-ed bits value of EEPROM_INT_*)
162 STATIC INLINE void IP_EEPROM_EnableInt(IP_EEPROM_002_T *pEEPROM, uint32_t mask)
164 pEEPROM->INTENSET = mask;
168 * @brief Disable EEPROM interrupt
169 * @param pEEPROM : pointer to EEPROM peripheral block
170 * @param mask : interrupt mask (or-ed bits value of EEPROM_INT_*)
173 STATIC INLINE void IP_EEPROM_DisableInt(IP_EEPROM_002_T *pEEPROM, uint32_t mask)
175 pEEPROM->INTENCLR = mask;
179 * @brief Get the value of the EEPROM interrupt enable register
180 * @param pEEPROM : pointer to EEPROM peripheral block
181 * @return Or-ed bits value of EEPROM_INT_*
183 STATIC INLINE uint32_t IP_EEPROM_GetIntEnable(IP_EEPROM_002_T *pEEPROM)
185 return pEEPROM->INTEN;
189 * @brief Get EEPROM interrupt status
190 * @param pEEPROM : pointer to EEPROM peripheral block
191 * @return Or-ed bits value of EEPROM_INT_*
193 STATIC INLINE uint32_t IP_EEPROM_GetIntStatus(IP_EEPROM_002_T *pEEPROM)
195 return pEEPROM->INTSTAT;
199 * @brief Set EEPROM interrupt status
200 * @param pEEPROM : pointer to EEPROM peripheral block
201 * @param mask : interrupt mask (or-ed bits value of EEPROM_INT_*)
204 STATIC INLINE void IP_EEPROM_SetIntStatus(IP_EEPROM_002_T *pEEPROM, uint32_t mask)
206 pEEPROM->INTSTATSET = mask;
210 * @brief Clear EEPROM interrupt status
211 * @param pEEPROM : pointer to EEPROM peripheral block
212 * @param mask : interrupt mask (or-ed bits value of EEPROM_INT_*)
215 STATIC INLINE void IP_EEPROM_ClearIntStatus(IP_EEPROM_002_T *pEEPROM, uint32_t mask)
217 pEEPROM->INTSTATCLR = mask;
221 * @brief Initializes EEPROM
222 * @param pEEPROM : pointer to EEPROM peripheral block
223 * @param div : clock divide value (pre-minus 1)
226 void IP_EEPROM_Init(IP_EEPROM_002_T *pEEPROM, uint32_t div);
229 * @brief De-initializes EEPROM
230 * @param pEEPROM : pointer to EEPROM peripheral block
233 STATIC INLINE void IP_EEPROM_DeInit(IP_EEPROM_002_T *pEEPROM)
235 /* Enable EEPROM power down mode */
236 IP_EEPROM_EnablePowerDown(pEEPROM);
240 * @brief Erase/Program an EEPROM page
241 * @param pEEPROM : pointer to EEPROM peripheral block
244 void IP_EEPROM_EraseProgramPage(IP_EEPROM_002_T *pEEPROM);
247 * @brief Wait for interrupt occurs
248 * @param pEEPROM : pointer to EEPROM peripheral block
249 * @param mask : expected interrupt
252 void IP_EEPROM_WaitForIntStatus(IP_EEPROM_002_T *pEEPROM, uint32_t mask);
262 #endif /* __EEPROM_002_H_ */