]> git.sur5r.net Git - freertos/blob
8e46ba2a162ea20c34459cbe3ee28d5deee3144a
[freertos] /
1 /*
2  * @brief EEPROM registers and driver functions
3  *
4  * @note
5  * Copyright(C) NXP Semiconductors, 2012
6  * All rights reserved.
7  *
8  * @par
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.
22  *
23  * @par
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
29  * this code.
30  */
31
32 #ifndef __EEPROM_002_H_
33 #define __EEPROM_002_H_
34
35 #include "sys_config.h"
36 #include "cmsis.h"
37
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41
42 /** @defgroup IP_EEPROM_002 IP: EEPROM register block and driver (002) 
43  * @ingroup IP_Drivers
44  * @{
45  */
46
47 /**
48  * @brief EEPROM register block structure
49  */
50 typedef struct {                                /* EEPROM Structure */
51         __IO uint32_t CMD;                      /*!< EEPROM command register */
52         uint32_t RESERVED0;
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 */
65 } IP_EEPROM_002_T;
66
67 /*
68  * @brief Macro defines for EEPROM command register
69  */
70 #define EEPROM_CMD_ERASE_PRG_PAGE       (6)             /*!< EEPROM erase/program command */
71
72 /*
73  * @brief Macro defines for EEPROM Auto Programming register
74  */
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) */
79
80 /*
81  * @brief Macro defines for EEPROM power down register
82  */
83 #define EEPROM_PWRDWN                   (1 << 0)
84
85 /*
86  * @brief Macro defines for EEPROM interrupt related registers
87  */
88 #define EEPROM_INT_ENDOFPROG               (1 << 2)
89
90 /**
91  * @brief       Select an EEPROM command
92  * @param       pEEPROM : pointer to EEPROM peripheral block
93  * @param       cmd     : EEPROM command.
94  * @return      Nothing
95  * @note            cmd is or-ed bits value of  EEPROM_CMD_*
96  */
97 STATIC INLINE void IP_EEPROM_SetCmd(IP_EEPROM_002_T *pEEPROM, uint32_t cmd)
98 {
99         pEEPROM->CMD = cmd;
100 }
101
102 /**
103  * @brief       Set Auto programming mode
104  * @param       pEEPROM : pointer to EEPROM peripheral block
105  * @param       mode    : Auto programming Mode (Value of EEPROM_AUTOPROG_).
106  * @return      Nothing
107  */
108 STATIC INLINE void IP_EEPROM_SetAutoProg(IP_EEPROM_002_T *pEEPROM, uint32_t mode)
109 {
110         pEEPROM->AUTOPROG = mode;
111 }
112
113 /**
114  * @brief       Set EEPROM Read Wait State value
115  * @param       pEEPROM : pointer to EEPROM peripheral block
116  * @param       ws      : Wait State value.
117  * @return      Nothing
118  */
119 STATIC INLINE void IP_EEPROM_SetReadWaitState(IP_EEPROM_002_T *pEEPROM, uint32_t ws)
120 {
121         pEEPROM->RWSTATE = ws;
122 }
123
124 /**
125  * @brief       Set EEPROM Wait State value
126  * @param       pEEPROM : pointer to EEPROM peripheral block
127  * @param       ws      : Wait State value.
128  * @return      Nothing
129  */
130 STATIC INLINE void IP_EEPROM_SetWaitState(IP_EEPROM_002_T *pEEPROM, uint32_t ws)
131 {
132         pEEPROM->WSTATE = ws;
133 }
134
135 /**
136  * @brief       Put EEPROM device in power down mode
137  * @param       pEEPROM         : pointer to EEPROM peripheral block
138  * @return      Nothing
139  */
140 STATIC INLINE void IP_EEPROM_EnablePowerDown(IP_EEPROM_002_T *pEEPROM)
141 {
142         pEEPROM->PWRDWN = EEPROM_PWRDWN;
143 }
144
145 /**
146  * @brief       Bring EEPROM device out of power down mode
147  * @param       pEEPROM         : pointer to EEPROM peripheral block
148  * @return      Nothing
149  * @note        Any EEPROM operation has to be suspended for 100us while the EEPROM wakes up.
150  */
151 STATIC INLINE void IP_EEPROM_DisablePowerDown(IP_EEPROM_002_T *pEEPROM)
152 {
153         pEEPROM->PWRDWN = 0;
154 }
155
156 /**
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_*)
160  * @return      Nothing
161  */
162 STATIC INLINE void IP_EEPROM_EnableInt(IP_EEPROM_002_T *pEEPROM, uint32_t mask)
163 {
164         pEEPROM->INTENSET =  mask;
165 }
166
167 /**
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_*)
171  * @return      Nothing
172  */
173 STATIC INLINE void IP_EEPROM_DisableInt(IP_EEPROM_002_T *pEEPROM, uint32_t mask)
174 {
175         pEEPROM->INTENCLR =  mask;
176 }
177
178 /**
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_*
182  */
183 STATIC INLINE uint32_t IP_EEPROM_GetIntEnable(IP_EEPROM_002_T *pEEPROM)
184 {
185         return pEEPROM->INTEN;
186 }
187
188 /**
189  * @brief       Get EEPROM interrupt status
190  * @param       pEEPROM         : pointer to EEPROM peripheral block
191  * @return      Or-ed bits value of EEPROM_INT_*
192  */
193 STATIC INLINE uint32_t IP_EEPROM_GetIntStatus(IP_EEPROM_002_T *pEEPROM)
194 {
195         return pEEPROM->INTSTAT;
196 }
197
198 /**
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_*)
202  * @return      Nothing
203  */
204 STATIC INLINE void IP_EEPROM_SetIntStatus(IP_EEPROM_002_T *pEEPROM, uint32_t mask)
205 {
206         pEEPROM->INTSTATSET =  mask;
207 }
208
209 /**
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_*)
213  * @return      Nothing
214  */
215 STATIC INLINE void IP_EEPROM_ClearIntStatus(IP_EEPROM_002_T *pEEPROM, uint32_t mask)
216 {
217         pEEPROM->INTSTATCLR =  mask;
218 }
219
220 /**
221  * @brief       Initializes EEPROM
222  * @param       pEEPROM : pointer to EEPROM peripheral block
223  * @param       div     : clock divide value (pre-minus 1)
224  * @return      Nothing
225  */
226 void IP_EEPROM_Init(IP_EEPROM_002_T *pEEPROM, uint32_t div);
227
228 /**
229  * @brief       De-initializes EEPROM
230  * @param       pEEPROM : pointer to EEPROM peripheral block
231  * @return      Nothing
232  */
233 STATIC INLINE void IP_EEPROM_DeInit(IP_EEPROM_002_T *pEEPROM)
234 {
235         /* Enable EEPROM power down mode */
236         IP_EEPROM_EnablePowerDown(pEEPROM);
237 }
238
239 /**
240  * @brief       Erase/Program an EEPROM page
241  * @param       pEEPROM                 : pointer to EEPROM peripheral block
242  * @return      Nothing
243  */
244 void IP_EEPROM_EraseProgramPage(IP_EEPROM_002_T *pEEPROM);
245
246 /**
247  * @brief       Wait for interrupt occurs
248  * @param       pEEPROM                 : pointer to EEPROM peripheral block
249  * @param       mask                    : expected interrupt
250  * @return      Nothing
251  */
252 void IP_EEPROM_WaitForIntStatus(IP_EEPROM_002_T *pEEPROM, uint32_t mask);
253
254 /**
255  * @}
256  */
257
258 #ifdef __cplusplus
259 }
260 #endif
261
262 #endif /* __EEPROM_002_H_ */