Mercurial > ~darius > hgwebdir.cgi > stm32temp
comparison libs/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_fsmc.c @ 0:c59513fd84fb
Initial commit of STM32 test code.
author | Daniel O'Connor <darius@dons.net.au> |
---|---|
date | Mon, 03 Oct 2011 21:19:15 +1030 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c59513fd84fb |
---|---|
1 /** | |
2 ****************************************************************************** | |
3 * @file stm32f10x_fsmc.c | |
4 * @author MCD Application Team | |
5 * @version V3.5.0 | |
6 * @date 11-March-2011 | |
7 * @brief This file provides all the FSMC firmware functions. | |
8 ****************************************************************************** | |
9 * @attention | |
10 * | |
11 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS | |
12 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE | |
13 * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY | |
14 * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING | |
15 * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE | |
16 * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. | |
17 * | |
18 * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2> | |
19 ****************************************************************************** | |
20 */ | |
21 | |
22 /* Includes ------------------------------------------------------------------*/ | |
23 #include "stm32f10x_fsmc.h" | |
24 #include "stm32f10x_rcc.h" | |
25 | |
26 /** @addtogroup STM32F10x_StdPeriph_Driver | |
27 * @{ | |
28 */ | |
29 | |
30 /** @defgroup FSMC | |
31 * @brief FSMC driver modules | |
32 * @{ | |
33 */ | |
34 | |
35 /** @defgroup FSMC_Private_TypesDefinitions | |
36 * @{ | |
37 */ | |
38 /** | |
39 * @} | |
40 */ | |
41 | |
42 /** @defgroup FSMC_Private_Defines | |
43 * @{ | |
44 */ | |
45 | |
46 /* --------------------- FSMC registers bit mask ---------------------------- */ | |
47 | |
48 /* FSMC BCRx Mask */ | |
49 #define BCR_MBKEN_Set ((uint32_t)0x00000001) | |
50 #define BCR_MBKEN_Reset ((uint32_t)0x000FFFFE) | |
51 #define BCR_FACCEN_Set ((uint32_t)0x00000040) | |
52 | |
53 /* FSMC PCRx Mask */ | |
54 #define PCR_PBKEN_Set ((uint32_t)0x00000004) | |
55 #define PCR_PBKEN_Reset ((uint32_t)0x000FFFFB) | |
56 #define PCR_ECCEN_Set ((uint32_t)0x00000040) | |
57 #define PCR_ECCEN_Reset ((uint32_t)0x000FFFBF) | |
58 #define PCR_MemoryType_NAND ((uint32_t)0x00000008) | |
59 /** | |
60 * @} | |
61 */ | |
62 | |
63 /** @defgroup FSMC_Private_Macros | |
64 * @{ | |
65 */ | |
66 | |
67 /** | |
68 * @} | |
69 */ | |
70 | |
71 /** @defgroup FSMC_Private_Variables | |
72 * @{ | |
73 */ | |
74 | |
75 /** | |
76 * @} | |
77 */ | |
78 | |
79 /** @defgroup FSMC_Private_FunctionPrototypes | |
80 * @{ | |
81 */ | |
82 | |
83 /** | |
84 * @} | |
85 */ | |
86 | |
87 /** @defgroup FSMC_Private_Functions | |
88 * @{ | |
89 */ | |
90 | |
91 /** | |
92 * @brief Deinitializes the FSMC NOR/SRAM Banks registers to their default | |
93 * reset values. | |
94 * @param FSMC_Bank: specifies the FSMC Bank to be used | |
95 * This parameter can be one of the following values: | |
96 * @arg FSMC_Bank1_NORSRAM1: FSMC Bank1 NOR/SRAM1 | |
97 * @arg FSMC_Bank1_NORSRAM2: FSMC Bank1 NOR/SRAM2 | |
98 * @arg FSMC_Bank1_NORSRAM3: FSMC Bank1 NOR/SRAM3 | |
99 * @arg FSMC_Bank1_NORSRAM4: FSMC Bank1 NOR/SRAM4 | |
100 * @retval None | |
101 */ | |
102 void FSMC_NORSRAMDeInit(uint32_t FSMC_Bank) | |
103 { | |
104 /* Check the parameter */ | |
105 assert_param(IS_FSMC_NORSRAM_BANK(FSMC_Bank)); | |
106 | |
107 /* FSMC_Bank1_NORSRAM1 */ | |
108 if(FSMC_Bank == FSMC_Bank1_NORSRAM1) | |
109 { | |
110 FSMC_Bank1->BTCR[FSMC_Bank] = 0x000030DB; | |
111 } | |
112 /* FSMC_Bank1_NORSRAM2, FSMC_Bank1_NORSRAM3 or FSMC_Bank1_NORSRAM4 */ | |
113 else | |
114 { | |
115 FSMC_Bank1->BTCR[FSMC_Bank] = 0x000030D2; | |
116 } | |
117 FSMC_Bank1->BTCR[FSMC_Bank + 1] = 0x0FFFFFFF; | |
118 FSMC_Bank1E->BWTR[FSMC_Bank] = 0x0FFFFFFF; | |
119 } | |
120 | |
121 /** | |
122 * @brief Deinitializes the FSMC NAND Banks registers to their default reset values. | |
123 * @param FSMC_Bank: specifies the FSMC Bank to be used | |
124 * This parameter can be one of the following values: | |
125 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND | |
126 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND | |
127 * @retval None | |
128 */ | |
129 void FSMC_NANDDeInit(uint32_t FSMC_Bank) | |
130 { | |
131 /* Check the parameter */ | |
132 assert_param(IS_FSMC_NAND_BANK(FSMC_Bank)); | |
133 | |
134 if(FSMC_Bank == FSMC_Bank2_NAND) | |
135 { | |
136 /* Set the FSMC_Bank2 registers to their reset values */ | |
137 FSMC_Bank2->PCR2 = 0x00000018; | |
138 FSMC_Bank2->SR2 = 0x00000040; | |
139 FSMC_Bank2->PMEM2 = 0xFCFCFCFC; | |
140 FSMC_Bank2->PATT2 = 0xFCFCFCFC; | |
141 } | |
142 /* FSMC_Bank3_NAND */ | |
143 else | |
144 { | |
145 /* Set the FSMC_Bank3 registers to their reset values */ | |
146 FSMC_Bank3->PCR3 = 0x00000018; | |
147 FSMC_Bank3->SR3 = 0x00000040; | |
148 FSMC_Bank3->PMEM3 = 0xFCFCFCFC; | |
149 FSMC_Bank3->PATT3 = 0xFCFCFCFC; | |
150 } | |
151 } | |
152 | |
153 /** | |
154 * @brief Deinitializes the FSMC PCCARD Bank registers to their default reset values. | |
155 * @param None | |
156 * @retval None | |
157 */ | |
158 void FSMC_PCCARDDeInit(void) | |
159 { | |
160 /* Set the FSMC_Bank4 registers to their reset values */ | |
161 FSMC_Bank4->PCR4 = 0x00000018; | |
162 FSMC_Bank4->SR4 = 0x00000000; | |
163 FSMC_Bank4->PMEM4 = 0xFCFCFCFC; | |
164 FSMC_Bank4->PATT4 = 0xFCFCFCFC; | |
165 FSMC_Bank4->PIO4 = 0xFCFCFCFC; | |
166 } | |
167 | |
168 /** | |
169 * @brief Initializes the FSMC NOR/SRAM Banks according to the specified | |
170 * parameters in the FSMC_NORSRAMInitStruct. | |
171 * @param FSMC_NORSRAMInitStruct : pointer to a FSMC_NORSRAMInitTypeDef | |
172 * structure that contains the configuration information for | |
173 * the FSMC NOR/SRAM specified Banks. | |
174 * @retval None | |
175 */ | |
176 void FSMC_NORSRAMInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct) | |
177 { | |
178 /* Check the parameters */ | |
179 assert_param(IS_FSMC_NORSRAM_BANK(FSMC_NORSRAMInitStruct->FSMC_Bank)); | |
180 assert_param(IS_FSMC_MUX(FSMC_NORSRAMInitStruct->FSMC_DataAddressMux)); | |
181 assert_param(IS_FSMC_MEMORY(FSMC_NORSRAMInitStruct->FSMC_MemoryType)); | |
182 assert_param(IS_FSMC_MEMORY_WIDTH(FSMC_NORSRAMInitStruct->FSMC_MemoryDataWidth)); | |
183 assert_param(IS_FSMC_BURSTMODE(FSMC_NORSRAMInitStruct->FSMC_BurstAccessMode)); | |
184 assert_param(IS_FSMC_ASYNWAIT(FSMC_NORSRAMInitStruct->FSMC_AsynchronousWait)); | |
185 assert_param(IS_FSMC_WAIT_POLARITY(FSMC_NORSRAMInitStruct->FSMC_WaitSignalPolarity)); | |
186 assert_param(IS_FSMC_WRAP_MODE(FSMC_NORSRAMInitStruct->FSMC_WrapMode)); | |
187 assert_param(IS_FSMC_WAIT_SIGNAL_ACTIVE(FSMC_NORSRAMInitStruct->FSMC_WaitSignalActive)); | |
188 assert_param(IS_FSMC_WRITE_OPERATION(FSMC_NORSRAMInitStruct->FSMC_WriteOperation)); | |
189 assert_param(IS_FSMC_WAITE_SIGNAL(FSMC_NORSRAMInitStruct->FSMC_WaitSignal)); | |
190 assert_param(IS_FSMC_EXTENDED_MODE(FSMC_NORSRAMInitStruct->FSMC_ExtendedMode)); | |
191 assert_param(IS_FSMC_WRITE_BURST(FSMC_NORSRAMInitStruct->FSMC_WriteBurst)); | |
192 assert_param(IS_FSMC_ADDRESS_SETUP_TIME(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressSetupTime)); | |
193 assert_param(IS_FSMC_ADDRESS_HOLD_TIME(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressHoldTime)); | |
194 assert_param(IS_FSMC_DATASETUP_TIME(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataSetupTime)); | |
195 assert_param(IS_FSMC_TURNAROUND_TIME(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_BusTurnAroundDuration)); | |
196 assert_param(IS_FSMC_CLK_DIV(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_CLKDivision)); | |
197 assert_param(IS_FSMC_DATA_LATENCY(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataLatency)); | |
198 assert_param(IS_FSMC_ACCESS_MODE(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AccessMode)); | |
199 | |
200 /* Bank1 NOR/SRAM control register configuration */ | |
201 FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank] = | |
202 (uint32_t)FSMC_NORSRAMInitStruct->FSMC_DataAddressMux | | |
203 FSMC_NORSRAMInitStruct->FSMC_MemoryType | | |
204 FSMC_NORSRAMInitStruct->FSMC_MemoryDataWidth | | |
205 FSMC_NORSRAMInitStruct->FSMC_BurstAccessMode | | |
206 FSMC_NORSRAMInitStruct->FSMC_AsynchronousWait | | |
207 FSMC_NORSRAMInitStruct->FSMC_WaitSignalPolarity | | |
208 FSMC_NORSRAMInitStruct->FSMC_WrapMode | | |
209 FSMC_NORSRAMInitStruct->FSMC_WaitSignalActive | | |
210 FSMC_NORSRAMInitStruct->FSMC_WriteOperation | | |
211 FSMC_NORSRAMInitStruct->FSMC_WaitSignal | | |
212 FSMC_NORSRAMInitStruct->FSMC_ExtendedMode | | |
213 FSMC_NORSRAMInitStruct->FSMC_WriteBurst; | |
214 | |
215 if(FSMC_NORSRAMInitStruct->FSMC_MemoryType == FSMC_MemoryType_NOR) | |
216 { | |
217 FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank] |= (uint32_t)BCR_FACCEN_Set; | |
218 } | |
219 | |
220 /* Bank1 NOR/SRAM timing register configuration */ | |
221 FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank+1] = | |
222 (uint32_t)FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressSetupTime | | |
223 (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressHoldTime << 4) | | |
224 (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataSetupTime << 8) | | |
225 (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_BusTurnAroundDuration << 16) | | |
226 (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_CLKDivision << 20) | | |
227 (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataLatency << 24) | | |
228 FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AccessMode; | |
229 | |
230 | |
231 /* Bank1 NOR/SRAM timing register for write configuration, if extended mode is used */ | |
232 if(FSMC_NORSRAMInitStruct->FSMC_ExtendedMode == FSMC_ExtendedMode_Enable) | |
233 { | |
234 assert_param(IS_FSMC_ADDRESS_SETUP_TIME(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressSetupTime)); | |
235 assert_param(IS_FSMC_ADDRESS_HOLD_TIME(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressHoldTime)); | |
236 assert_param(IS_FSMC_DATASETUP_TIME(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataSetupTime)); | |
237 assert_param(IS_FSMC_CLK_DIV(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_CLKDivision)); | |
238 assert_param(IS_FSMC_DATA_LATENCY(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataLatency)); | |
239 assert_param(IS_FSMC_ACCESS_MODE(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AccessMode)); | |
240 FSMC_Bank1E->BWTR[FSMC_NORSRAMInitStruct->FSMC_Bank] = | |
241 (uint32_t)FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressSetupTime | | |
242 (FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressHoldTime << 4 )| | |
243 (FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataSetupTime << 8) | | |
244 (FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_CLKDivision << 20) | | |
245 (FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataLatency << 24) | | |
246 FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AccessMode; | |
247 } | |
248 else | |
249 { | |
250 FSMC_Bank1E->BWTR[FSMC_NORSRAMInitStruct->FSMC_Bank] = 0x0FFFFFFF; | |
251 } | |
252 } | |
253 | |
254 /** | |
255 * @brief Initializes the FSMC NAND Banks according to the specified | |
256 * parameters in the FSMC_NANDInitStruct. | |
257 * @param FSMC_NANDInitStruct : pointer to a FSMC_NANDInitTypeDef | |
258 * structure that contains the configuration information for the FSMC | |
259 * NAND specified Banks. | |
260 * @retval None | |
261 */ | |
262 void FSMC_NANDInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct) | |
263 { | |
264 uint32_t tmppcr = 0x00000000, tmppmem = 0x00000000, tmppatt = 0x00000000; | |
265 | |
266 /* Check the parameters */ | |
267 assert_param( IS_FSMC_NAND_BANK(FSMC_NANDInitStruct->FSMC_Bank)); | |
268 assert_param( IS_FSMC_WAIT_FEATURE(FSMC_NANDInitStruct->FSMC_Waitfeature)); | |
269 assert_param( IS_FSMC_MEMORY_WIDTH(FSMC_NANDInitStruct->FSMC_MemoryDataWidth)); | |
270 assert_param( IS_FSMC_ECC_STATE(FSMC_NANDInitStruct->FSMC_ECC)); | |
271 assert_param( IS_FSMC_ECCPAGE_SIZE(FSMC_NANDInitStruct->FSMC_ECCPageSize)); | |
272 assert_param( IS_FSMC_TCLR_TIME(FSMC_NANDInitStruct->FSMC_TCLRSetupTime)); | |
273 assert_param( IS_FSMC_TAR_TIME(FSMC_NANDInitStruct->FSMC_TARSetupTime)); | |
274 assert_param(IS_FSMC_SETUP_TIME(FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime)); | |
275 assert_param(IS_FSMC_WAIT_TIME(FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime)); | |
276 assert_param(IS_FSMC_HOLD_TIME(FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime)); | |
277 assert_param(IS_FSMC_HIZ_TIME(FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime)); | |
278 assert_param(IS_FSMC_SETUP_TIME(FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime)); | |
279 assert_param(IS_FSMC_WAIT_TIME(FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime)); | |
280 assert_param(IS_FSMC_HOLD_TIME(FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime)); | |
281 assert_param(IS_FSMC_HIZ_TIME(FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime)); | |
282 | |
283 /* Set the tmppcr value according to FSMC_NANDInitStruct parameters */ | |
284 tmppcr = (uint32_t)FSMC_NANDInitStruct->FSMC_Waitfeature | | |
285 PCR_MemoryType_NAND | | |
286 FSMC_NANDInitStruct->FSMC_MemoryDataWidth | | |
287 FSMC_NANDInitStruct->FSMC_ECC | | |
288 FSMC_NANDInitStruct->FSMC_ECCPageSize | | |
289 (FSMC_NANDInitStruct->FSMC_TCLRSetupTime << 9 )| | |
290 (FSMC_NANDInitStruct->FSMC_TARSetupTime << 13); | |
291 | |
292 /* Set tmppmem value according to FSMC_CommonSpaceTimingStructure parameters */ | |
293 tmppmem = (uint32_t)FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime | | |
294 (FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime << 8) | | |
295 (FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime << 16)| | |
296 (FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime << 24); | |
297 | |
298 /* Set tmppatt value according to FSMC_AttributeSpaceTimingStructure parameters */ | |
299 tmppatt = (uint32_t)FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime | | |
300 (FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime << 8) | | |
301 (FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime << 16)| | |
302 (FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime << 24); | |
303 | |
304 if(FSMC_NANDInitStruct->FSMC_Bank == FSMC_Bank2_NAND) | |
305 { | |
306 /* FSMC_Bank2_NAND registers configuration */ | |
307 FSMC_Bank2->PCR2 = tmppcr; | |
308 FSMC_Bank2->PMEM2 = tmppmem; | |
309 FSMC_Bank2->PATT2 = tmppatt; | |
310 } | |
311 else | |
312 { | |
313 /* FSMC_Bank3_NAND registers configuration */ | |
314 FSMC_Bank3->PCR3 = tmppcr; | |
315 FSMC_Bank3->PMEM3 = tmppmem; | |
316 FSMC_Bank3->PATT3 = tmppatt; | |
317 } | |
318 } | |
319 | |
320 /** | |
321 * @brief Initializes the FSMC PCCARD Bank according to the specified | |
322 * parameters in the FSMC_PCCARDInitStruct. | |
323 * @param FSMC_PCCARDInitStruct : pointer to a FSMC_PCCARDInitTypeDef | |
324 * structure that contains the configuration information for the FSMC | |
325 * PCCARD Bank. | |
326 * @retval None | |
327 */ | |
328 void FSMC_PCCARDInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct) | |
329 { | |
330 /* Check the parameters */ | |
331 assert_param(IS_FSMC_WAIT_FEATURE(FSMC_PCCARDInitStruct->FSMC_Waitfeature)); | |
332 assert_param(IS_FSMC_TCLR_TIME(FSMC_PCCARDInitStruct->FSMC_TCLRSetupTime)); | |
333 assert_param(IS_FSMC_TAR_TIME(FSMC_PCCARDInitStruct->FSMC_TARSetupTime)); | |
334 | |
335 assert_param(IS_FSMC_SETUP_TIME(FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime)); | |
336 assert_param(IS_FSMC_WAIT_TIME(FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime)); | |
337 assert_param(IS_FSMC_HOLD_TIME(FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime)); | |
338 assert_param(IS_FSMC_HIZ_TIME(FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime)); | |
339 | |
340 assert_param(IS_FSMC_SETUP_TIME(FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime)); | |
341 assert_param(IS_FSMC_WAIT_TIME(FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime)); | |
342 assert_param(IS_FSMC_HOLD_TIME(FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime)); | |
343 assert_param(IS_FSMC_HIZ_TIME(FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime)); | |
344 assert_param(IS_FSMC_SETUP_TIME(FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_SetupTime)); | |
345 assert_param(IS_FSMC_WAIT_TIME(FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_WaitSetupTime)); | |
346 assert_param(IS_FSMC_HOLD_TIME(FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HoldSetupTime)); | |
347 assert_param(IS_FSMC_HIZ_TIME(FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HiZSetupTime)); | |
348 | |
349 /* Set the PCR4 register value according to FSMC_PCCARDInitStruct parameters */ | |
350 FSMC_Bank4->PCR4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_Waitfeature | | |
351 FSMC_MemoryDataWidth_16b | | |
352 (FSMC_PCCARDInitStruct->FSMC_TCLRSetupTime << 9) | | |
353 (FSMC_PCCARDInitStruct->FSMC_TARSetupTime << 13); | |
354 | |
355 /* Set PMEM4 register value according to FSMC_CommonSpaceTimingStructure parameters */ | |
356 FSMC_Bank4->PMEM4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime | | |
357 (FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime << 8) | | |
358 (FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime << 16)| | |
359 (FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime << 24); | |
360 | |
361 /* Set PATT4 register value according to FSMC_AttributeSpaceTimingStructure parameters */ | |
362 FSMC_Bank4->PATT4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime | | |
363 (FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime << 8) | | |
364 (FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime << 16)| | |
365 (FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime << 24); | |
366 | |
367 /* Set PIO4 register value according to FSMC_IOSpaceTimingStructure parameters */ | |
368 FSMC_Bank4->PIO4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_SetupTime | | |
369 (FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_WaitSetupTime << 8) | | |
370 (FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HoldSetupTime << 16)| | |
371 (FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HiZSetupTime << 24); | |
372 } | |
373 | |
374 /** | |
375 * @brief Fills each FSMC_NORSRAMInitStruct member with its default value. | |
376 * @param FSMC_NORSRAMInitStruct: pointer to a FSMC_NORSRAMInitTypeDef | |
377 * structure which will be initialized. | |
378 * @retval None | |
379 */ | |
380 void FSMC_NORSRAMStructInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct) | |
381 { | |
382 /* Reset NOR/SRAM Init structure parameters values */ | |
383 FSMC_NORSRAMInitStruct->FSMC_Bank = FSMC_Bank1_NORSRAM1; | |
384 FSMC_NORSRAMInitStruct->FSMC_DataAddressMux = FSMC_DataAddressMux_Enable; | |
385 FSMC_NORSRAMInitStruct->FSMC_MemoryType = FSMC_MemoryType_SRAM; | |
386 FSMC_NORSRAMInitStruct->FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b; | |
387 FSMC_NORSRAMInitStruct->FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; | |
388 FSMC_NORSRAMInitStruct->FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; | |
389 FSMC_NORSRAMInitStruct->FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; | |
390 FSMC_NORSRAMInitStruct->FSMC_WrapMode = FSMC_WrapMode_Disable; | |
391 FSMC_NORSRAMInitStruct->FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; | |
392 FSMC_NORSRAMInitStruct->FSMC_WriteOperation = FSMC_WriteOperation_Enable; | |
393 FSMC_NORSRAMInitStruct->FSMC_WaitSignal = FSMC_WaitSignal_Enable; | |
394 FSMC_NORSRAMInitStruct->FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; | |
395 FSMC_NORSRAMInitStruct->FSMC_WriteBurst = FSMC_WriteBurst_Disable; | |
396 FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressSetupTime = 0xF; | |
397 FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressHoldTime = 0xF; | |
398 FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataSetupTime = 0xFF; | |
399 FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_BusTurnAroundDuration = 0xF; | |
400 FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_CLKDivision = 0xF; | |
401 FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataLatency = 0xF; | |
402 FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AccessMode = FSMC_AccessMode_A; | |
403 FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressSetupTime = 0xF; | |
404 FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressHoldTime = 0xF; | |
405 FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataSetupTime = 0xFF; | |
406 FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_BusTurnAroundDuration = 0xF; | |
407 FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_CLKDivision = 0xF; | |
408 FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataLatency = 0xF; | |
409 FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AccessMode = FSMC_AccessMode_A; | |
410 } | |
411 | |
412 /** | |
413 * @brief Fills each FSMC_NANDInitStruct member with its default value. | |
414 * @param FSMC_NANDInitStruct: pointer to a FSMC_NANDInitTypeDef | |
415 * structure which will be initialized. | |
416 * @retval None | |
417 */ | |
418 void FSMC_NANDStructInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct) | |
419 { | |
420 /* Reset NAND Init structure parameters values */ | |
421 FSMC_NANDInitStruct->FSMC_Bank = FSMC_Bank2_NAND; | |
422 FSMC_NANDInitStruct->FSMC_Waitfeature = FSMC_Waitfeature_Disable; | |
423 FSMC_NANDInitStruct->FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b; | |
424 FSMC_NANDInitStruct->FSMC_ECC = FSMC_ECC_Disable; | |
425 FSMC_NANDInitStruct->FSMC_ECCPageSize = FSMC_ECCPageSize_256Bytes; | |
426 FSMC_NANDInitStruct->FSMC_TCLRSetupTime = 0x0; | |
427 FSMC_NANDInitStruct->FSMC_TARSetupTime = 0x0; | |
428 FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime = 0xFC; | |
429 FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC; | |
430 FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC; | |
431 FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC; | |
432 FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime = 0xFC; | |
433 FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC; | |
434 FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC; | |
435 FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC; | |
436 } | |
437 | |
438 /** | |
439 * @brief Fills each FSMC_PCCARDInitStruct member with its default value. | |
440 * @param FSMC_PCCARDInitStruct: pointer to a FSMC_PCCARDInitTypeDef | |
441 * structure which will be initialized. | |
442 * @retval None | |
443 */ | |
444 void FSMC_PCCARDStructInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct) | |
445 { | |
446 /* Reset PCCARD Init structure parameters values */ | |
447 FSMC_PCCARDInitStruct->FSMC_Waitfeature = FSMC_Waitfeature_Disable; | |
448 FSMC_PCCARDInitStruct->FSMC_TCLRSetupTime = 0x0; | |
449 FSMC_PCCARDInitStruct->FSMC_TARSetupTime = 0x0; | |
450 FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime = 0xFC; | |
451 FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC; | |
452 FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC; | |
453 FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC; | |
454 FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime = 0xFC; | |
455 FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC; | |
456 FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC; | |
457 FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC; | |
458 FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_SetupTime = 0xFC; | |
459 FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC; | |
460 FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC; | |
461 FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC; | |
462 } | |
463 | |
464 /** | |
465 * @brief Enables or disables the specified NOR/SRAM Memory Bank. | |
466 * @param FSMC_Bank: specifies the FSMC Bank to be used | |
467 * This parameter can be one of the following values: | |
468 * @arg FSMC_Bank1_NORSRAM1: FSMC Bank1 NOR/SRAM1 | |
469 * @arg FSMC_Bank1_NORSRAM2: FSMC Bank1 NOR/SRAM2 | |
470 * @arg FSMC_Bank1_NORSRAM3: FSMC Bank1 NOR/SRAM3 | |
471 * @arg FSMC_Bank1_NORSRAM4: FSMC Bank1 NOR/SRAM4 | |
472 * @param NewState: new state of the FSMC_Bank. This parameter can be: ENABLE or DISABLE. | |
473 * @retval None | |
474 */ | |
475 void FSMC_NORSRAMCmd(uint32_t FSMC_Bank, FunctionalState NewState) | |
476 { | |
477 assert_param(IS_FSMC_NORSRAM_BANK(FSMC_Bank)); | |
478 assert_param(IS_FUNCTIONAL_STATE(NewState)); | |
479 | |
480 if (NewState != DISABLE) | |
481 { | |
482 /* Enable the selected NOR/SRAM Bank by setting the PBKEN bit in the BCRx register */ | |
483 FSMC_Bank1->BTCR[FSMC_Bank] |= BCR_MBKEN_Set; | |
484 } | |
485 else | |
486 { | |
487 /* Disable the selected NOR/SRAM Bank by clearing the PBKEN bit in the BCRx register */ | |
488 FSMC_Bank1->BTCR[FSMC_Bank] &= BCR_MBKEN_Reset; | |
489 } | |
490 } | |
491 | |
492 /** | |
493 * @brief Enables or disables the specified NAND Memory Bank. | |
494 * @param FSMC_Bank: specifies the FSMC Bank to be used | |
495 * This parameter can be one of the following values: | |
496 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND | |
497 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND | |
498 * @param NewState: new state of the FSMC_Bank. This parameter can be: ENABLE or DISABLE. | |
499 * @retval None | |
500 */ | |
501 void FSMC_NANDCmd(uint32_t FSMC_Bank, FunctionalState NewState) | |
502 { | |
503 assert_param(IS_FSMC_NAND_BANK(FSMC_Bank)); | |
504 assert_param(IS_FUNCTIONAL_STATE(NewState)); | |
505 | |
506 if (NewState != DISABLE) | |
507 { | |
508 /* Enable the selected NAND Bank by setting the PBKEN bit in the PCRx register */ | |
509 if(FSMC_Bank == FSMC_Bank2_NAND) | |
510 { | |
511 FSMC_Bank2->PCR2 |= PCR_PBKEN_Set; | |
512 } | |
513 else | |
514 { | |
515 FSMC_Bank3->PCR3 |= PCR_PBKEN_Set; | |
516 } | |
517 } | |
518 else | |
519 { | |
520 /* Disable the selected NAND Bank by clearing the PBKEN bit in the PCRx register */ | |
521 if(FSMC_Bank == FSMC_Bank2_NAND) | |
522 { | |
523 FSMC_Bank2->PCR2 &= PCR_PBKEN_Reset; | |
524 } | |
525 else | |
526 { | |
527 FSMC_Bank3->PCR3 &= PCR_PBKEN_Reset; | |
528 } | |
529 } | |
530 } | |
531 | |
532 /** | |
533 * @brief Enables or disables the PCCARD Memory Bank. | |
534 * @param NewState: new state of the PCCARD Memory Bank. | |
535 * This parameter can be: ENABLE or DISABLE. | |
536 * @retval None | |
537 */ | |
538 void FSMC_PCCARDCmd(FunctionalState NewState) | |
539 { | |
540 assert_param(IS_FUNCTIONAL_STATE(NewState)); | |
541 | |
542 if (NewState != DISABLE) | |
543 { | |
544 /* Enable the PCCARD Bank by setting the PBKEN bit in the PCR4 register */ | |
545 FSMC_Bank4->PCR4 |= PCR_PBKEN_Set; | |
546 } | |
547 else | |
548 { | |
549 /* Disable the PCCARD Bank by clearing the PBKEN bit in the PCR4 register */ | |
550 FSMC_Bank4->PCR4 &= PCR_PBKEN_Reset; | |
551 } | |
552 } | |
553 | |
554 /** | |
555 * @brief Enables or disables the FSMC NAND ECC feature. | |
556 * @param FSMC_Bank: specifies the FSMC Bank to be used | |
557 * This parameter can be one of the following values: | |
558 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND | |
559 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND | |
560 * @param NewState: new state of the FSMC NAND ECC feature. | |
561 * This parameter can be: ENABLE or DISABLE. | |
562 * @retval None | |
563 */ | |
564 void FSMC_NANDECCCmd(uint32_t FSMC_Bank, FunctionalState NewState) | |
565 { | |
566 assert_param(IS_FSMC_NAND_BANK(FSMC_Bank)); | |
567 assert_param(IS_FUNCTIONAL_STATE(NewState)); | |
568 | |
569 if (NewState != DISABLE) | |
570 { | |
571 /* Enable the selected NAND Bank ECC function by setting the ECCEN bit in the PCRx register */ | |
572 if(FSMC_Bank == FSMC_Bank2_NAND) | |
573 { | |
574 FSMC_Bank2->PCR2 |= PCR_ECCEN_Set; | |
575 } | |
576 else | |
577 { | |
578 FSMC_Bank3->PCR3 |= PCR_ECCEN_Set; | |
579 } | |
580 } | |
581 else | |
582 { | |
583 /* Disable the selected NAND Bank ECC function by clearing the ECCEN bit in the PCRx register */ | |
584 if(FSMC_Bank == FSMC_Bank2_NAND) | |
585 { | |
586 FSMC_Bank2->PCR2 &= PCR_ECCEN_Reset; | |
587 } | |
588 else | |
589 { | |
590 FSMC_Bank3->PCR3 &= PCR_ECCEN_Reset; | |
591 } | |
592 } | |
593 } | |
594 | |
595 /** | |
596 * @brief Returns the error correction code register value. | |
597 * @param FSMC_Bank: specifies the FSMC Bank to be used | |
598 * This parameter can be one of the following values: | |
599 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND | |
600 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND | |
601 * @retval The Error Correction Code (ECC) value. | |
602 */ | |
603 uint32_t FSMC_GetECC(uint32_t FSMC_Bank) | |
604 { | |
605 uint32_t eccval = 0x00000000; | |
606 | |
607 if(FSMC_Bank == FSMC_Bank2_NAND) | |
608 { | |
609 /* Get the ECCR2 register value */ | |
610 eccval = FSMC_Bank2->ECCR2; | |
611 } | |
612 else | |
613 { | |
614 /* Get the ECCR3 register value */ | |
615 eccval = FSMC_Bank3->ECCR3; | |
616 } | |
617 /* Return the error correction code value */ | |
618 return(eccval); | |
619 } | |
620 | |
621 /** | |
622 * @brief Enables or disables the specified FSMC interrupts. | |
623 * @param FSMC_Bank: specifies the FSMC Bank to be used | |
624 * This parameter can be one of the following values: | |
625 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND | |
626 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND | |
627 * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD | |
628 * @param FSMC_IT: specifies the FSMC interrupt sources to be enabled or disabled. | |
629 * This parameter can be any combination of the following values: | |
630 * @arg FSMC_IT_RisingEdge: Rising edge detection interrupt. | |
631 * @arg FSMC_IT_Level: Level edge detection interrupt. | |
632 * @arg FSMC_IT_FallingEdge: Falling edge detection interrupt. | |
633 * @param NewState: new state of the specified FSMC interrupts. | |
634 * This parameter can be: ENABLE or DISABLE. | |
635 * @retval None | |
636 */ | |
637 void FSMC_ITConfig(uint32_t FSMC_Bank, uint32_t FSMC_IT, FunctionalState NewState) | |
638 { | |
639 assert_param(IS_FSMC_IT_BANK(FSMC_Bank)); | |
640 assert_param(IS_FSMC_IT(FSMC_IT)); | |
641 assert_param(IS_FUNCTIONAL_STATE(NewState)); | |
642 | |
643 if (NewState != DISABLE) | |
644 { | |
645 /* Enable the selected FSMC_Bank2 interrupts */ | |
646 if(FSMC_Bank == FSMC_Bank2_NAND) | |
647 { | |
648 FSMC_Bank2->SR2 |= FSMC_IT; | |
649 } | |
650 /* Enable the selected FSMC_Bank3 interrupts */ | |
651 else if (FSMC_Bank == FSMC_Bank3_NAND) | |
652 { | |
653 FSMC_Bank3->SR3 |= FSMC_IT; | |
654 } | |
655 /* Enable the selected FSMC_Bank4 interrupts */ | |
656 else | |
657 { | |
658 FSMC_Bank4->SR4 |= FSMC_IT; | |
659 } | |
660 } | |
661 else | |
662 { | |
663 /* Disable the selected FSMC_Bank2 interrupts */ | |
664 if(FSMC_Bank == FSMC_Bank2_NAND) | |
665 { | |
666 | |
667 FSMC_Bank2->SR2 &= (uint32_t)~FSMC_IT; | |
668 } | |
669 /* Disable the selected FSMC_Bank3 interrupts */ | |
670 else if (FSMC_Bank == FSMC_Bank3_NAND) | |
671 { | |
672 FSMC_Bank3->SR3 &= (uint32_t)~FSMC_IT; | |
673 } | |
674 /* Disable the selected FSMC_Bank4 interrupts */ | |
675 else | |
676 { | |
677 FSMC_Bank4->SR4 &= (uint32_t)~FSMC_IT; | |
678 } | |
679 } | |
680 } | |
681 | |
682 /** | |
683 * @brief Checks whether the specified FSMC flag is set or not. | |
684 * @param FSMC_Bank: specifies the FSMC Bank to be used | |
685 * This parameter can be one of the following values: | |
686 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND | |
687 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND | |
688 * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD | |
689 * @param FSMC_FLAG: specifies the flag to check. | |
690 * This parameter can be one of the following values: | |
691 * @arg FSMC_FLAG_RisingEdge: Rising egde detection Flag. | |
692 * @arg FSMC_FLAG_Level: Level detection Flag. | |
693 * @arg FSMC_FLAG_FallingEdge: Falling egde detection Flag. | |
694 * @arg FSMC_FLAG_FEMPT: Fifo empty Flag. | |
695 * @retval The new state of FSMC_FLAG (SET or RESET). | |
696 */ | |
697 FlagStatus FSMC_GetFlagStatus(uint32_t FSMC_Bank, uint32_t FSMC_FLAG) | |
698 { | |
699 FlagStatus bitstatus = RESET; | |
700 uint32_t tmpsr = 0x00000000; | |
701 | |
702 /* Check the parameters */ | |
703 assert_param(IS_FSMC_GETFLAG_BANK(FSMC_Bank)); | |
704 assert_param(IS_FSMC_GET_FLAG(FSMC_FLAG)); | |
705 | |
706 if(FSMC_Bank == FSMC_Bank2_NAND) | |
707 { | |
708 tmpsr = FSMC_Bank2->SR2; | |
709 } | |
710 else if(FSMC_Bank == FSMC_Bank3_NAND) | |
711 { | |
712 tmpsr = FSMC_Bank3->SR3; | |
713 } | |
714 /* FSMC_Bank4_PCCARD*/ | |
715 else | |
716 { | |
717 tmpsr = FSMC_Bank4->SR4; | |
718 } | |
719 | |
720 /* Get the flag status */ | |
721 if ((tmpsr & FSMC_FLAG) != (uint16_t)RESET ) | |
722 { | |
723 bitstatus = SET; | |
724 } | |
725 else | |
726 { | |
727 bitstatus = RESET; | |
728 } | |
729 /* Return the flag status */ | |
730 return bitstatus; | |
731 } | |
732 | |
733 /** | |
734 * @brief Clears the FSMC's pending flags. | |
735 * @param FSMC_Bank: specifies the FSMC Bank to be used | |
736 * This parameter can be one of the following values: | |
737 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND | |
738 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND | |
739 * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD | |
740 * @param FSMC_FLAG: specifies the flag to clear. | |
741 * This parameter can be any combination of the following values: | |
742 * @arg FSMC_FLAG_RisingEdge: Rising egde detection Flag. | |
743 * @arg FSMC_FLAG_Level: Level detection Flag. | |
744 * @arg FSMC_FLAG_FallingEdge: Falling egde detection Flag. | |
745 * @retval None | |
746 */ | |
747 void FSMC_ClearFlag(uint32_t FSMC_Bank, uint32_t FSMC_FLAG) | |
748 { | |
749 /* Check the parameters */ | |
750 assert_param(IS_FSMC_GETFLAG_BANK(FSMC_Bank)); | |
751 assert_param(IS_FSMC_CLEAR_FLAG(FSMC_FLAG)) ; | |
752 | |
753 if(FSMC_Bank == FSMC_Bank2_NAND) | |
754 { | |
755 FSMC_Bank2->SR2 &= ~FSMC_FLAG; | |
756 } | |
757 else if(FSMC_Bank == FSMC_Bank3_NAND) | |
758 { | |
759 FSMC_Bank3->SR3 &= ~FSMC_FLAG; | |
760 } | |
761 /* FSMC_Bank4_PCCARD*/ | |
762 else | |
763 { | |
764 FSMC_Bank4->SR4 &= ~FSMC_FLAG; | |
765 } | |
766 } | |
767 | |
768 /** | |
769 * @brief Checks whether the specified FSMC interrupt has occurred or not. | |
770 * @param FSMC_Bank: specifies the FSMC Bank to be used | |
771 * This parameter can be one of the following values: | |
772 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND | |
773 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND | |
774 * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD | |
775 * @param FSMC_IT: specifies the FSMC interrupt source to check. | |
776 * This parameter can be one of the following values: | |
777 * @arg FSMC_IT_RisingEdge: Rising edge detection interrupt. | |
778 * @arg FSMC_IT_Level: Level edge detection interrupt. | |
779 * @arg FSMC_IT_FallingEdge: Falling edge detection interrupt. | |
780 * @retval The new state of FSMC_IT (SET or RESET). | |
781 */ | |
782 ITStatus FSMC_GetITStatus(uint32_t FSMC_Bank, uint32_t FSMC_IT) | |
783 { | |
784 ITStatus bitstatus = RESET; | |
785 uint32_t tmpsr = 0x0, itstatus = 0x0, itenable = 0x0; | |
786 | |
787 /* Check the parameters */ | |
788 assert_param(IS_FSMC_IT_BANK(FSMC_Bank)); | |
789 assert_param(IS_FSMC_GET_IT(FSMC_IT)); | |
790 | |
791 if(FSMC_Bank == FSMC_Bank2_NAND) | |
792 { | |
793 tmpsr = FSMC_Bank2->SR2; | |
794 } | |
795 else if(FSMC_Bank == FSMC_Bank3_NAND) | |
796 { | |
797 tmpsr = FSMC_Bank3->SR3; | |
798 } | |
799 /* FSMC_Bank4_PCCARD*/ | |
800 else | |
801 { | |
802 tmpsr = FSMC_Bank4->SR4; | |
803 } | |
804 | |
805 itstatus = tmpsr & FSMC_IT; | |
806 | |
807 itenable = tmpsr & (FSMC_IT >> 3); | |
808 if ((itstatus != (uint32_t)RESET) && (itenable != (uint32_t)RESET)) | |
809 { | |
810 bitstatus = SET; | |
811 } | |
812 else | |
813 { | |
814 bitstatus = RESET; | |
815 } | |
816 return bitstatus; | |
817 } | |
818 | |
819 /** | |
820 * @brief Clears the FSMC's interrupt pending bits. | |
821 * @param FSMC_Bank: specifies the FSMC Bank to be used | |
822 * This parameter can be one of the following values: | |
823 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND | |
824 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND | |
825 * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD | |
826 * @param FSMC_IT: specifies the interrupt pending bit to clear. | |
827 * This parameter can be any combination of the following values: | |
828 * @arg FSMC_IT_RisingEdge: Rising edge detection interrupt. | |
829 * @arg FSMC_IT_Level: Level edge detection interrupt. | |
830 * @arg FSMC_IT_FallingEdge: Falling edge detection interrupt. | |
831 * @retval None | |
832 */ | |
833 void FSMC_ClearITPendingBit(uint32_t FSMC_Bank, uint32_t FSMC_IT) | |
834 { | |
835 /* Check the parameters */ | |
836 assert_param(IS_FSMC_IT_BANK(FSMC_Bank)); | |
837 assert_param(IS_FSMC_IT(FSMC_IT)); | |
838 | |
839 if(FSMC_Bank == FSMC_Bank2_NAND) | |
840 { | |
841 FSMC_Bank2->SR2 &= ~(FSMC_IT >> 3); | |
842 } | |
843 else if(FSMC_Bank == FSMC_Bank3_NAND) | |
844 { | |
845 FSMC_Bank3->SR3 &= ~(FSMC_IT >> 3); | |
846 } | |
847 /* FSMC_Bank4_PCCARD*/ | |
848 else | |
849 { | |
850 FSMC_Bank4->SR4 &= ~(FSMC_IT >> 3); | |
851 } | |
852 } | |
853 | |
854 /** | |
855 * @} | |
856 */ | |
857 | |
858 /** | |
859 * @} | |
860 */ | |
861 | |
862 /** | |
863 * @} | |
864 */ | |
865 | |
866 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ |