2 ******************************************************************************
\r
3 * @file stm32f10x_fsmc.c
\r
4 * @author MCD Application Team
\r
6 * @date 11-March-2011
\r
7 * @brief This file provides all the FSMC firmware functions.
\r
8 ******************************************************************************
\r
11 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
\r
12 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
\r
13 * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
\r
14 * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
\r
15 * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
\r
16 * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
\r
18 * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
\r
19 ******************************************************************************
\r
22 /* Includes ------------------------------------------------------------------*/
\r
23 #include "stm32f10x_fsmc.h"
\r
24 #include "stm32f10x_rcc.h"
\r
26 /** @addtogroup STM32F10x_StdPeriph_Driver
\r
31 * @brief FSMC driver modules
\r
35 /** @defgroup FSMC_Private_TypesDefinitions
\r
42 /** @defgroup FSMC_Private_Defines
\r
46 /* --------------------- FSMC registers bit mask ---------------------------- */
\r
48 /* FSMC BCRx Mask */
\r
49 #define BCR_MBKEN_Set ((uint32_t)0x00000001)
\r
50 #define BCR_MBKEN_Reset ((uint32_t)0x000FFFFE)
\r
51 #define BCR_FACCEN_Set ((uint32_t)0x00000040)
\r
53 /* FSMC PCRx Mask */
\r
54 #define PCR_PBKEN_Set ((uint32_t)0x00000004)
\r
55 #define PCR_PBKEN_Reset ((uint32_t)0x000FFFFB)
\r
56 #define PCR_ECCEN_Set ((uint32_t)0x00000040)
\r
57 #define PCR_ECCEN_Reset ((uint32_t)0x000FFFBF)
\r
58 #define PCR_MemoryType_NAND ((uint32_t)0x00000008)
\r
63 /** @defgroup FSMC_Private_Macros
\r
71 /** @defgroup FSMC_Private_Variables
\r
79 /** @defgroup FSMC_Private_FunctionPrototypes
\r
87 /** @defgroup FSMC_Private_Functions
\r
92 * @brief Deinitializes the FSMC NOR/SRAM Banks registers to their default
\r
94 * @param FSMC_Bank: specifies the FSMC Bank to be used
\r
95 * This parameter can be one of the following values:
\r
96 * @arg FSMC_Bank1_NORSRAM1: FSMC Bank1 NOR/SRAM1
\r
97 * @arg FSMC_Bank1_NORSRAM2: FSMC Bank1 NOR/SRAM2
\r
98 * @arg FSMC_Bank1_NORSRAM3: FSMC Bank1 NOR/SRAM3
\r
99 * @arg FSMC_Bank1_NORSRAM4: FSMC Bank1 NOR/SRAM4
\r
102 void FSMC_NORSRAMDeInit(uint32_t FSMC_Bank)
\r
104 /* Check the parameter */
\r
105 assert_param(IS_FSMC_NORSRAM_BANK(FSMC_Bank));
\r
107 /* FSMC_Bank1_NORSRAM1 */
\r
108 if(FSMC_Bank == FSMC_Bank1_NORSRAM1)
\r
110 FSMC_Bank1->BTCR[FSMC_Bank] = 0x000030DB;
\r
112 /* FSMC_Bank1_NORSRAM2, FSMC_Bank1_NORSRAM3 or FSMC_Bank1_NORSRAM4 */
\r
115 FSMC_Bank1->BTCR[FSMC_Bank] = 0x000030D2;
\r
117 FSMC_Bank1->BTCR[FSMC_Bank + 1] = 0x0FFFFFFF;
\r
118 FSMC_Bank1E->BWTR[FSMC_Bank] = 0x0FFFFFFF;
\r
122 * @brief Deinitializes the FSMC NAND Banks registers to their default reset values.
\r
123 * @param FSMC_Bank: specifies the FSMC Bank to be used
\r
124 * This parameter can be one of the following values:
\r
125 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND
\r
126 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND
\r
129 void FSMC_NANDDeInit(uint32_t FSMC_Bank)
\r
131 /* Check the parameter */
\r
132 assert_param(IS_FSMC_NAND_BANK(FSMC_Bank));
\r
134 if(FSMC_Bank == FSMC_Bank2_NAND)
\r
136 /* Set the FSMC_Bank2 registers to their reset values */
\r
137 FSMC_Bank2->PCR2 = 0x00000018;
\r
138 FSMC_Bank2->SR2 = 0x00000040;
\r
139 FSMC_Bank2->PMEM2 = 0xFCFCFCFC;
\r
140 FSMC_Bank2->PATT2 = 0xFCFCFCFC;
\r
142 /* FSMC_Bank3_NAND */
\r
145 /* Set the FSMC_Bank3 registers to their reset values */
\r
146 FSMC_Bank3->PCR3 = 0x00000018;
\r
147 FSMC_Bank3->SR3 = 0x00000040;
\r
148 FSMC_Bank3->PMEM3 = 0xFCFCFCFC;
\r
149 FSMC_Bank3->PATT3 = 0xFCFCFCFC;
\r
154 * @brief Deinitializes the FSMC PCCARD Bank registers to their default reset values.
\r
158 void FSMC_PCCARDDeInit(void)
\r
160 /* Set the FSMC_Bank4 registers to their reset values */
\r
161 FSMC_Bank4->PCR4 = 0x00000018;
\r
162 FSMC_Bank4->SR4 = 0x00000000;
\r
163 FSMC_Bank4->PMEM4 = 0xFCFCFCFC;
\r
164 FSMC_Bank4->PATT4 = 0xFCFCFCFC;
\r
165 FSMC_Bank4->PIO4 = 0xFCFCFCFC;
\r
169 * @brief Initializes the FSMC NOR/SRAM Banks according to the specified
\r
170 * parameters in the FSMC_NORSRAMInitStruct.
\r
171 * @param FSMC_NORSRAMInitStruct : pointer to a FSMC_NORSRAMInitTypeDef
\r
172 * structure that contains the configuration information for
\r
173 * the FSMC NOR/SRAM specified Banks.
\r
176 void FSMC_NORSRAMInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct)
\r
178 /* Check the parameters */
\r
179 assert_param(IS_FSMC_NORSRAM_BANK(FSMC_NORSRAMInitStruct->FSMC_Bank));
\r
180 assert_param(IS_FSMC_MUX(FSMC_NORSRAMInitStruct->FSMC_DataAddressMux));
\r
181 assert_param(IS_FSMC_MEMORY(FSMC_NORSRAMInitStruct->FSMC_MemoryType));
\r
182 assert_param(IS_FSMC_MEMORY_WIDTH(FSMC_NORSRAMInitStruct->FSMC_MemoryDataWidth));
\r
183 assert_param(IS_FSMC_BURSTMODE(FSMC_NORSRAMInitStruct->FSMC_BurstAccessMode));
\r
184 assert_param(IS_FSMC_ASYNWAIT(FSMC_NORSRAMInitStruct->FSMC_AsynchronousWait));
\r
185 assert_param(IS_FSMC_WAIT_POLARITY(FSMC_NORSRAMInitStruct->FSMC_WaitSignalPolarity));
\r
186 assert_param(IS_FSMC_WRAP_MODE(FSMC_NORSRAMInitStruct->FSMC_WrapMode));
\r
187 assert_param(IS_FSMC_WAIT_SIGNAL_ACTIVE(FSMC_NORSRAMInitStruct->FSMC_WaitSignalActive));
\r
188 assert_param(IS_FSMC_WRITE_OPERATION(FSMC_NORSRAMInitStruct->FSMC_WriteOperation));
\r
189 assert_param(IS_FSMC_WAITE_SIGNAL(FSMC_NORSRAMInitStruct->FSMC_WaitSignal));
\r
190 assert_param(IS_FSMC_EXTENDED_MODE(FSMC_NORSRAMInitStruct->FSMC_ExtendedMode));
\r
191 assert_param(IS_FSMC_WRITE_BURST(FSMC_NORSRAMInitStruct->FSMC_WriteBurst));
\r
192 assert_param(IS_FSMC_ADDRESS_SETUP_TIME(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressSetupTime));
\r
193 assert_param(IS_FSMC_ADDRESS_HOLD_TIME(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressHoldTime));
\r
194 assert_param(IS_FSMC_DATASETUP_TIME(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataSetupTime));
\r
195 assert_param(IS_FSMC_TURNAROUND_TIME(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_BusTurnAroundDuration));
\r
196 assert_param(IS_FSMC_CLK_DIV(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_CLKDivision));
\r
197 assert_param(IS_FSMC_DATA_LATENCY(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataLatency));
\r
198 assert_param(IS_FSMC_ACCESS_MODE(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AccessMode));
\r
200 /* Bank1 NOR/SRAM control register configuration */
\r
201 FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank] =
\r
202 (uint32_t)FSMC_NORSRAMInitStruct->FSMC_DataAddressMux |
\r
203 FSMC_NORSRAMInitStruct->FSMC_MemoryType |
\r
204 FSMC_NORSRAMInitStruct->FSMC_MemoryDataWidth |
\r
205 FSMC_NORSRAMInitStruct->FSMC_BurstAccessMode |
\r
206 FSMC_NORSRAMInitStruct->FSMC_AsynchronousWait |
\r
207 FSMC_NORSRAMInitStruct->FSMC_WaitSignalPolarity |
\r
208 FSMC_NORSRAMInitStruct->FSMC_WrapMode |
\r
209 FSMC_NORSRAMInitStruct->FSMC_WaitSignalActive |
\r
210 FSMC_NORSRAMInitStruct->FSMC_WriteOperation |
\r
211 FSMC_NORSRAMInitStruct->FSMC_WaitSignal |
\r
212 FSMC_NORSRAMInitStruct->FSMC_ExtendedMode |
\r
213 FSMC_NORSRAMInitStruct->FSMC_WriteBurst;
\r
215 if(FSMC_NORSRAMInitStruct->FSMC_MemoryType == FSMC_MemoryType_NOR)
\r
217 FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank] |= (uint32_t)BCR_FACCEN_Set;
\r
220 /* Bank1 NOR/SRAM timing register configuration */
\r
221 FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank+1] =
\r
222 (uint32_t)FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressSetupTime |
\r
223 (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressHoldTime << 4) |
\r
224 (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataSetupTime << 8) |
\r
225 (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_BusTurnAroundDuration << 16) |
\r
226 (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_CLKDivision << 20) |
\r
227 (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataLatency << 24) |
\r
228 FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AccessMode;
\r
231 /* Bank1 NOR/SRAM timing register for write configuration, if extended mode is used */
\r
232 if(FSMC_NORSRAMInitStruct->FSMC_ExtendedMode == FSMC_ExtendedMode_Enable)
\r
234 assert_param(IS_FSMC_ADDRESS_SETUP_TIME(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressSetupTime));
\r
235 assert_param(IS_FSMC_ADDRESS_HOLD_TIME(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressHoldTime));
\r
236 assert_param(IS_FSMC_DATASETUP_TIME(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataSetupTime));
\r
237 assert_param(IS_FSMC_CLK_DIV(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_CLKDivision));
\r
238 assert_param(IS_FSMC_DATA_LATENCY(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataLatency));
\r
239 assert_param(IS_FSMC_ACCESS_MODE(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AccessMode));
\r
240 FSMC_Bank1E->BWTR[FSMC_NORSRAMInitStruct->FSMC_Bank] =
\r
241 (uint32_t)FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressSetupTime |
\r
242 (FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressHoldTime << 4 )|
\r
243 (FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataSetupTime << 8) |
\r
244 (FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_CLKDivision << 20) |
\r
245 (FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataLatency << 24) |
\r
246 FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AccessMode;
\r
250 FSMC_Bank1E->BWTR[FSMC_NORSRAMInitStruct->FSMC_Bank] = 0x0FFFFFFF;
\r
255 * @brief Initializes the FSMC NAND Banks according to the specified
\r
256 * parameters in the FSMC_NANDInitStruct.
\r
257 * @param FSMC_NANDInitStruct : pointer to a FSMC_NANDInitTypeDef
\r
258 * structure that contains the configuration information for the FSMC
\r
259 * NAND specified Banks.
\r
262 void FSMC_NANDInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct)
\r
264 uint32_t tmppcr = 0x00000000, tmppmem = 0x00000000, tmppatt = 0x00000000;
\r
266 /* Check the parameters */
\r
267 assert_param( IS_FSMC_NAND_BANK(FSMC_NANDInitStruct->FSMC_Bank));
\r
268 assert_param( IS_FSMC_WAIT_FEATURE(FSMC_NANDInitStruct->FSMC_Waitfeature));
\r
269 assert_param( IS_FSMC_MEMORY_WIDTH(FSMC_NANDInitStruct->FSMC_MemoryDataWidth));
\r
270 assert_param( IS_FSMC_ECC_STATE(FSMC_NANDInitStruct->FSMC_ECC));
\r
271 assert_param( IS_FSMC_ECCPAGE_SIZE(FSMC_NANDInitStruct->FSMC_ECCPageSize));
\r
272 assert_param( IS_FSMC_TCLR_TIME(FSMC_NANDInitStruct->FSMC_TCLRSetupTime));
\r
273 assert_param( IS_FSMC_TAR_TIME(FSMC_NANDInitStruct->FSMC_TARSetupTime));
\r
274 assert_param(IS_FSMC_SETUP_TIME(FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime));
\r
275 assert_param(IS_FSMC_WAIT_TIME(FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime));
\r
276 assert_param(IS_FSMC_HOLD_TIME(FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime));
\r
277 assert_param(IS_FSMC_HIZ_TIME(FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime));
\r
278 assert_param(IS_FSMC_SETUP_TIME(FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime));
\r
279 assert_param(IS_FSMC_WAIT_TIME(FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime));
\r
280 assert_param(IS_FSMC_HOLD_TIME(FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime));
\r
281 assert_param(IS_FSMC_HIZ_TIME(FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime));
\r
283 /* Set the tmppcr value according to FSMC_NANDInitStruct parameters */
\r
284 tmppcr = (uint32_t)FSMC_NANDInitStruct->FSMC_Waitfeature |
\r
285 PCR_MemoryType_NAND |
\r
286 FSMC_NANDInitStruct->FSMC_MemoryDataWidth |
\r
287 FSMC_NANDInitStruct->FSMC_ECC |
\r
288 FSMC_NANDInitStruct->FSMC_ECCPageSize |
\r
289 (FSMC_NANDInitStruct->FSMC_TCLRSetupTime << 9 )|
\r
290 (FSMC_NANDInitStruct->FSMC_TARSetupTime << 13);
\r
292 /* Set tmppmem value according to FSMC_CommonSpaceTimingStructure parameters */
\r
293 tmppmem = (uint32_t)FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime |
\r
294 (FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime << 8) |
\r
295 (FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime << 16)|
\r
296 (FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime << 24);
\r
298 /* Set tmppatt value according to FSMC_AttributeSpaceTimingStructure parameters */
\r
299 tmppatt = (uint32_t)FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime |
\r
300 (FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime << 8) |
\r
301 (FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime << 16)|
\r
302 (FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime << 24);
\r
304 if(FSMC_NANDInitStruct->FSMC_Bank == FSMC_Bank2_NAND)
\r
306 /* FSMC_Bank2_NAND registers configuration */
\r
307 FSMC_Bank2->PCR2 = tmppcr;
\r
308 FSMC_Bank2->PMEM2 = tmppmem;
\r
309 FSMC_Bank2->PATT2 = tmppatt;
\r
313 /* FSMC_Bank3_NAND registers configuration */
\r
314 FSMC_Bank3->PCR3 = tmppcr;
\r
315 FSMC_Bank3->PMEM3 = tmppmem;
\r
316 FSMC_Bank3->PATT3 = tmppatt;
\r
321 * @brief Initializes the FSMC PCCARD Bank according to the specified
\r
322 * parameters in the FSMC_PCCARDInitStruct.
\r
323 * @param FSMC_PCCARDInitStruct : pointer to a FSMC_PCCARDInitTypeDef
\r
324 * structure that contains the configuration information for the FSMC
\r
328 void FSMC_PCCARDInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct)
\r
330 /* Check the parameters */
\r
331 assert_param(IS_FSMC_WAIT_FEATURE(FSMC_PCCARDInitStruct->FSMC_Waitfeature));
\r
332 assert_param(IS_FSMC_TCLR_TIME(FSMC_PCCARDInitStruct->FSMC_TCLRSetupTime));
\r
333 assert_param(IS_FSMC_TAR_TIME(FSMC_PCCARDInitStruct->FSMC_TARSetupTime));
\r
335 assert_param(IS_FSMC_SETUP_TIME(FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime));
\r
336 assert_param(IS_FSMC_WAIT_TIME(FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime));
\r
337 assert_param(IS_FSMC_HOLD_TIME(FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime));
\r
338 assert_param(IS_FSMC_HIZ_TIME(FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime));
\r
340 assert_param(IS_FSMC_SETUP_TIME(FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime));
\r
341 assert_param(IS_FSMC_WAIT_TIME(FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime));
\r
342 assert_param(IS_FSMC_HOLD_TIME(FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime));
\r
343 assert_param(IS_FSMC_HIZ_TIME(FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime));
\r
344 assert_param(IS_FSMC_SETUP_TIME(FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_SetupTime));
\r
345 assert_param(IS_FSMC_WAIT_TIME(FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_WaitSetupTime));
\r
346 assert_param(IS_FSMC_HOLD_TIME(FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HoldSetupTime));
\r
347 assert_param(IS_FSMC_HIZ_TIME(FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HiZSetupTime));
\r
349 /* Set the PCR4 register value according to FSMC_PCCARDInitStruct parameters */
\r
350 FSMC_Bank4->PCR4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_Waitfeature |
\r
351 FSMC_MemoryDataWidth_16b |
\r
352 (FSMC_PCCARDInitStruct->FSMC_TCLRSetupTime << 9) |
\r
353 (FSMC_PCCARDInitStruct->FSMC_TARSetupTime << 13);
\r
355 /* Set PMEM4 register value according to FSMC_CommonSpaceTimingStructure parameters */
\r
356 FSMC_Bank4->PMEM4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime |
\r
357 (FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime << 8) |
\r
358 (FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime << 16)|
\r
359 (FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime << 24);
\r
361 /* Set PATT4 register value according to FSMC_AttributeSpaceTimingStructure parameters */
\r
362 FSMC_Bank4->PATT4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime |
\r
363 (FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime << 8) |
\r
364 (FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime << 16)|
\r
365 (FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime << 24);
\r
367 /* Set PIO4 register value according to FSMC_IOSpaceTimingStructure parameters */
\r
368 FSMC_Bank4->PIO4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_SetupTime |
\r
369 (FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_WaitSetupTime << 8) |
\r
370 (FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HoldSetupTime << 16)|
\r
371 (FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HiZSetupTime << 24);
\r
375 * @brief Fills each FSMC_NORSRAMInitStruct member with its default value.
\r
376 * @param FSMC_NORSRAMInitStruct: pointer to a FSMC_NORSRAMInitTypeDef
\r
377 * structure which will be initialized.
\r
380 void FSMC_NORSRAMStructInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct)
\r
382 /* Reset NOR/SRAM Init structure parameters values */
\r
383 FSMC_NORSRAMInitStruct->FSMC_Bank = FSMC_Bank1_NORSRAM1;
\r
384 FSMC_NORSRAMInitStruct->FSMC_DataAddressMux = FSMC_DataAddressMux_Enable;
\r
385 FSMC_NORSRAMInitStruct->FSMC_MemoryType = FSMC_MemoryType_SRAM;
\r
386 FSMC_NORSRAMInitStruct->FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
\r
387 FSMC_NORSRAMInitStruct->FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
\r
388 FSMC_NORSRAMInitStruct->FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
\r
389 FSMC_NORSRAMInitStruct->FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
\r
390 FSMC_NORSRAMInitStruct->FSMC_WrapMode = FSMC_WrapMode_Disable;
\r
391 FSMC_NORSRAMInitStruct->FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
\r
392 FSMC_NORSRAMInitStruct->FSMC_WriteOperation = FSMC_WriteOperation_Enable;
\r
393 FSMC_NORSRAMInitStruct->FSMC_WaitSignal = FSMC_WaitSignal_Enable;
\r
394 FSMC_NORSRAMInitStruct->FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
\r
395 FSMC_NORSRAMInitStruct->FSMC_WriteBurst = FSMC_WriteBurst_Disable;
\r
396 FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressSetupTime = 0xF;
\r
397 FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressHoldTime = 0xF;
\r
398 FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataSetupTime = 0xFF;
\r
399 FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_BusTurnAroundDuration = 0xF;
\r
400 FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_CLKDivision = 0xF;
\r
401 FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataLatency = 0xF;
\r
402 FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AccessMode = FSMC_AccessMode_A;
\r
403 FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressSetupTime = 0xF;
\r
404 FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressHoldTime = 0xF;
\r
405 FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataSetupTime = 0xFF;
\r
406 FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_BusTurnAroundDuration = 0xF;
\r
407 FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_CLKDivision = 0xF;
\r
408 FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataLatency = 0xF;
\r
409 FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AccessMode = FSMC_AccessMode_A;
\r
413 * @brief Fills each FSMC_NANDInitStruct member with its default value.
\r
414 * @param FSMC_NANDInitStruct: pointer to a FSMC_NANDInitTypeDef
\r
415 * structure which will be initialized.
\r
418 void FSMC_NANDStructInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct)
\r
420 /* Reset NAND Init structure parameters values */
\r
421 FSMC_NANDInitStruct->FSMC_Bank = FSMC_Bank2_NAND;
\r
422 FSMC_NANDInitStruct->FSMC_Waitfeature = FSMC_Waitfeature_Disable;
\r
423 FSMC_NANDInitStruct->FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
\r
424 FSMC_NANDInitStruct->FSMC_ECC = FSMC_ECC_Disable;
\r
425 FSMC_NANDInitStruct->FSMC_ECCPageSize = FSMC_ECCPageSize_256Bytes;
\r
426 FSMC_NANDInitStruct->FSMC_TCLRSetupTime = 0x0;
\r
427 FSMC_NANDInitStruct->FSMC_TARSetupTime = 0x0;
\r
428 FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime = 0xFC;
\r
429 FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC;
\r
430 FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC;
\r
431 FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC;
\r
432 FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime = 0xFC;
\r
433 FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC;
\r
434 FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC;
\r
435 FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC;
\r
439 * @brief Fills each FSMC_PCCARDInitStruct member with its default value.
\r
440 * @param FSMC_PCCARDInitStruct: pointer to a FSMC_PCCARDInitTypeDef
\r
441 * structure which will be initialized.
\r
444 void FSMC_PCCARDStructInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct)
\r
446 /* Reset PCCARD Init structure parameters values */
\r
447 FSMC_PCCARDInitStruct->FSMC_Waitfeature = FSMC_Waitfeature_Disable;
\r
448 FSMC_PCCARDInitStruct->FSMC_TCLRSetupTime = 0x0;
\r
449 FSMC_PCCARDInitStruct->FSMC_TARSetupTime = 0x0;
\r
450 FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime = 0xFC;
\r
451 FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC;
\r
452 FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC;
\r
453 FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC;
\r
454 FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime = 0xFC;
\r
455 FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC;
\r
456 FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC;
\r
457 FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC;
\r
458 FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_SetupTime = 0xFC;
\r
459 FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC;
\r
460 FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC;
\r
461 FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC;
\r
465 * @brief Enables or disables the specified NOR/SRAM Memory Bank.
\r
466 * @param FSMC_Bank: specifies the FSMC Bank to be used
\r
467 * This parameter can be one of the following values:
\r
468 * @arg FSMC_Bank1_NORSRAM1: FSMC Bank1 NOR/SRAM1
\r
469 * @arg FSMC_Bank1_NORSRAM2: FSMC Bank1 NOR/SRAM2
\r
470 * @arg FSMC_Bank1_NORSRAM3: FSMC Bank1 NOR/SRAM3
\r
471 * @arg FSMC_Bank1_NORSRAM4: FSMC Bank1 NOR/SRAM4
\r
472 * @param NewState: new state of the FSMC_Bank. This parameter can be: ENABLE or DISABLE.
\r
475 void FSMC_NORSRAMCmd(uint32_t FSMC_Bank, FunctionalState NewState)
\r
477 assert_param(IS_FSMC_NORSRAM_BANK(FSMC_Bank));
\r
478 assert_param(IS_FUNCTIONAL_STATE(NewState));
\r
480 if (NewState != DISABLE)
\r
482 /* Enable the selected NOR/SRAM Bank by setting the PBKEN bit in the BCRx register */
\r
483 FSMC_Bank1->BTCR[FSMC_Bank] |= BCR_MBKEN_Set;
\r
487 /* Disable the selected NOR/SRAM Bank by clearing the PBKEN bit in the BCRx register */
\r
488 FSMC_Bank1->BTCR[FSMC_Bank] &= BCR_MBKEN_Reset;
\r
493 * @brief Enables or disables the specified NAND Memory Bank.
\r
494 * @param FSMC_Bank: specifies the FSMC Bank to be used
\r
495 * This parameter can be one of the following values:
\r
496 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND
\r
497 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND
\r
498 * @param NewState: new state of the FSMC_Bank. This parameter can be: ENABLE or DISABLE.
\r
501 void FSMC_NANDCmd(uint32_t FSMC_Bank, FunctionalState NewState)
\r
503 assert_param(IS_FSMC_NAND_BANK(FSMC_Bank));
\r
504 assert_param(IS_FUNCTIONAL_STATE(NewState));
\r
506 if (NewState != DISABLE)
\r
508 /* Enable the selected NAND Bank by setting the PBKEN bit in the PCRx register */
\r
509 if(FSMC_Bank == FSMC_Bank2_NAND)
\r
511 FSMC_Bank2->PCR2 |= PCR_PBKEN_Set;
\r
515 FSMC_Bank3->PCR3 |= PCR_PBKEN_Set;
\r
520 /* Disable the selected NAND Bank by clearing the PBKEN bit in the PCRx register */
\r
521 if(FSMC_Bank == FSMC_Bank2_NAND)
\r
523 FSMC_Bank2->PCR2 &= PCR_PBKEN_Reset;
\r
527 FSMC_Bank3->PCR3 &= PCR_PBKEN_Reset;
\r
533 * @brief Enables or disables the PCCARD Memory Bank.
\r
534 * @param NewState: new state of the PCCARD Memory Bank.
\r
535 * This parameter can be: ENABLE or DISABLE.
\r
538 void FSMC_PCCARDCmd(FunctionalState NewState)
\r
540 assert_param(IS_FUNCTIONAL_STATE(NewState));
\r
542 if (NewState != DISABLE)
\r
544 /* Enable the PCCARD Bank by setting the PBKEN bit in the PCR4 register */
\r
545 FSMC_Bank4->PCR4 |= PCR_PBKEN_Set;
\r
549 /* Disable the PCCARD Bank by clearing the PBKEN bit in the PCR4 register */
\r
550 FSMC_Bank4->PCR4 &= PCR_PBKEN_Reset;
\r
555 * @brief Enables or disables the FSMC NAND ECC feature.
\r
556 * @param FSMC_Bank: specifies the FSMC Bank to be used
\r
557 * This parameter can be one of the following values:
\r
558 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND
\r
559 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND
\r
560 * @param NewState: new state of the FSMC NAND ECC feature.
\r
561 * This parameter can be: ENABLE or DISABLE.
\r
564 void FSMC_NANDECCCmd(uint32_t FSMC_Bank, FunctionalState NewState)
\r
566 assert_param(IS_FSMC_NAND_BANK(FSMC_Bank));
\r
567 assert_param(IS_FUNCTIONAL_STATE(NewState));
\r
569 if (NewState != DISABLE)
\r
571 /* Enable the selected NAND Bank ECC function by setting the ECCEN bit in the PCRx register */
\r
572 if(FSMC_Bank == FSMC_Bank2_NAND)
\r
574 FSMC_Bank2->PCR2 |= PCR_ECCEN_Set;
\r
578 FSMC_Bank3->PCR3 |= PCR_ECCEN_Set;
\r
583 /* Disable the selected NAND Bank ECC function by clearing the ECCEN bit in the PCRx register */
\r
584 if(FSMC_Bank == FSMC_Bank2_NAND)
\r
586 FSMC_Bank2->PCR2 &= PCR_ECCEN_Reset;
\r
590 FSMC_Bank3->PCR3 &= PCR_ECCEN_Reset;
\r
596 * @brief Returns the error correction code register value.
\r
597 * @param FSMC_Bank: specifies the FSMC Bank to be used
\r
598 * This parameter can be one of the following values:
\r
599 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND
\r
600 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND
\r
601 * @retval The Error Correction Code (ECC) value.
\r
603 uint32_t FSMC_GetECC(uint32_t FSMC_Bank)
\r
605 uint32_t eccval = 0x00000000;
\r
607 if(FSMC_Bank == FSMC_Bank2_NAND)
\r
609 /* Get the ECCR2 register value */
\r
610 eccval = FSMC_Bank2->ECCR2;
\r
614 /* Get the ECCR3 register value */
\r
615 eccval = FSMC_Bank3->ECCR3;
\r
617 /* Return the error correction code value */
\r
622 * @brief Enables or disables the specified FSMC interrupts.
\r
623 * @param FSMC_Bank: specifies the FSMC Bank to be used
\r
624 * This parameter can be one of the following values:
\r
625 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND
\r
626 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND
\r
627 * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD
\r
628 * @param FSMC_IT: specifies the FSMC interrupt sources to be enabled or disabled.
\r
629 * This parameter can be any combination of the following values:
\r
630 * @arg FSMC_IT_RisingEdge: Rising edge detection interrupt.
\r
631 * @arg FSMC_IT_Level: Level edge detection interrupt.
\r
632 * @arg FSMC_IT_FallingEdge: Falling edge detection interrupt.
\r
633 * @param NewState: new state of the specified FSMC interrupts.
\r
634 * This parameter can be: ENABLE or DISABLE.
\r
637 void FSMC_ITConfig(uint32_t FSMC_Bank, uint32_t FSMC_IT, FunctionalState NewState)
\r
639 assert_param(IS_FSMC_IT_BANK(FSMC_Bank));
\r
640 assert_param(IS_FSMC_IT(FSMC_IT));
\r
641 assert_param(IS_FUNCTIONAL_STATE(NewState));
\r
643 if (NewState != DISABLE)
\r
645 /* Enable the selected FSMC_Bank2 interrupts */
\r
646 if(FSMC_Bank == FSMC_Bank2_NAND)
\r
648 FSMC_Bank2->SR2 |= FSMC_IT;
\r
650 /* Enable the selected FSMC_Bank3 interrupts */
\r
651 else if (FSMC_Bank == FSMC_Bank3_NAND)
\r
653 FSMC_Bank3->SR3 |= FSMC_IT;
\r
655 /* Enable the selected FSMC_Bank4 interrupts */
\r
658 FSMC_Bank4->SR4 |= FSMC_IT;
\r
663 /* Disable the selected FSMC_Bank2 interrupts */
\r
664 if(FSMC_Bank == FSMC_Bank2_NAND)
\r
667 FSMC_Bank2->SR2 &= (uint32_t)~FSMC_IT;
\r
669 /* Disable the selected FSMC_Bank3 interrupts */
\r
670 else if (FSMC_Bank == FSMC_Bank3_NAND)
\r
672 FSMC_Bank3->SR3 &= (uint32_t)~FSMC_IT;
\r
674 /* Disable the selected FSMC_Bank4 interrupts */
\r
677 FSMC_Bank4->SR4 &= (uint32_t)~FSMC_IT;
\r
683 * @brief Checks whether the specified FSMC flag is set or not.
\r
684 * @param FSMC_Bank: specifies the FSMC Bank to be used
\r
685 * This parameter can be one of the following values:
\r
686 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND
\r
687 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND
\r
688 * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD
\r
689 * @param FSMC_FLAG: specifies the flag to check.
\r
690 * This parameter can be one of the following values:
\r
691 * @arg FSMC_FLAG_RisingEdge: Rising egde detection Flag.
\r
692 * @arg FSMC_FLAG_Level: Level detection Flag.
\r
693 * @arg FSMC_FLAG_FallingEdge: Falling egde detection Flag.
\r
694 * @arg FSMC_FLAG_FEMPT: Fifo empty Flag.
\r
695 * @retval The new state of FSMC_FLAG (SET or RESET).
\r
697 FlagStatus FSMC_GetFlagStatus(uint32_t FSMC_Bank, uint32_t FSMC_FLAG)
\r
699 FlagStatus bitstatus = RESET;
\r
700 uint32_t tmpsr = 0x00000000;
\r
702 /* Check the parameters */
\r
703 assert_param(IS_FSMC_GETFLAG_BANK(FSMC_Bank));
\r
704 assert_param(IS_FSMC_GET_FLAG(FSMC_FLAG));
\r
706 if(FSMC_Bank == FSMC_Bank2_NAND)
\r
708 tmpsr = FSMC_Bank2->SR2;
\r
710 else if(FSMC_Bank == FSMC_Bank3_NAND)
\r
712 tmpsr = FSMC_Bank3->SR3;
\r
714 /* FSMC_Bank4_PCCARD*/
\r
717 tmpsr = FSMC_Bank4->SR4;
\r
720 /* Get the flag status */
\r
721 if ((tmpsr & FSMC_FLAG) != (uint16_t)RESET )
\r
729 /* Return the flag status */
\r
734 * @brief Clears the FSMC's pending flags.
\r
735 * @param FSMC_Bank: specifies the FSMC Bank to be used
\r
736 * This parameter can be one of the following values:
\r
737 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND
\r
738 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND
\r
739 * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD
\r
740 * @param FSMC_FLAG: specifies the flag to clear.
\r
741 * This parameter can be any combination of the following values:
\r
742 * @arg FSMC_FLAG_RisingEdge: Rising egde detection Flag.
\r
743 * @arg FSMC_FLAG_Level: Level detection Flag.
\r
744 * @arg FSMC_FLAG_FallingEdge: Falling egde detection Flag.
\r
747 void FSMC_ClearFlag(uint32_t FSMC_Bank, uint32_t FSMC_FLAG)
\r
749 /* Check the parameters */
\r
750 assert_param(IS_FSMC_GETFLAG_BANK(FSMC_Bank));
\r
751 assert_param(IS_FSMC_CLEAR_FLAG(FSMC_FLAG)) ;
\r
753 if(FSMC_Bank == FSMC_Bank2_NAND)
\r
755 FSMC_Bank2->SR2 &= ~FSMC_FLAG;
\r
757 else if(FSMC_Bank == FSMC_Bank3_NAND)
\r
759 FSMC_Bank3->SR3 &= ~FSMC_FLAG;
\r
761 /* FSMC_Bank4_PCCARD*/
\r
764 FSMC_Bank4->SR4 &= ~FSMC_FLAG;
\r
769 * @brief Checks whether the specified FSMC interrupt has occurred or not.
\r
770 * @param FSMC_Bank: specifies the FSMC Bank to be used
\r
771 * This parameter can be one of the following values:
\r
772 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND
\r
773 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND
\r
774 * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD
\r
775 * @param FSMC_IT: specifies the FSMC interrupt source to check.
\r
776 * This parameter can be one of the following values:
\r
777 * @arg FSMC_IT_RisingEdge: Rising edge detection interrupt.
\r
778 * @arg FSMC_IT_Level: Level edge detection interrupt.
\r
779 * @arg FSMC_IT_FallingEdge: Falling edge detection interrupt.
\r
780 * @retval The new state of FSMC_IT (SET or RESET).
\r
782 ITStatus FSMC_GetITStatus(uint32_t FSMC_Bank, uint32_t FSMC_IT)
\r
784 ITStatus bitstatus = RESET;
\r
785 uint32_t tmpsr = 0x0, itstatus = 0x0, itenable = 0x0;
\r
787 /* Check the parameters */
\r
788 assert_param(IS_FSMC_IT_BANK(FSMC_Bank));
\r
789 assert_param(IS_FSMC_GET_IT(FSMC_IT));
\r
791 if(FSMC_Bank == FSMC_Bank2_NAND)
\r
793 tmpsr = FSMC_Bank2->SR2;
\r
795 else if(FSMC_Bank == FSMC_Bank3_NAND)
\r
797 tmpsr = FSMC_Bank3->SR3;
\r
799 /* FSMC_Bank4_PCCARD*/
\r
802 tmpsr = FSMC_Bank4->SR4;
\r
805 itstatus = tmpsr & FSMC_IT;
\r
807 itenable = tmpsr & (FSMC_IT >> 3);
\r
808 if ((itstatus != (uint32_t)RESET) && (itenable != (uint32_t)RESET))
\r
820 * @brief Clears the FSMC's interrupt pending bits.
\r
821 * @param FSMC_Bank: specifies the FSMC Bank to be used
\r
822 * This parameter can be one of the following values:
\r
823 * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND
\r
824 * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND
\r
825 * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD
\r
826 * @param FSMC_IT: specifies the interrupt pending bit to clear.
\r
827 * This parameter can be any combination of the following values:
\r
828 * @arg FSMC_IT_RisingEdge: Rising edge detection interrupt.
\r
829 * @arg FSMC_IT_Level: Level edge detection interrupt.
\r
830 * @arg FSMC_IT_FallingEdge: Falling edge detection interrupt.
\r
833 void FSMC_ClearITPendingBit(uint32_t FSMC_Bank, uint32_t FSMC_IT)
\r
835 /* Check the parameters */
\r
836 assert_param(IS_FSMC_IT_BANK(FSMC_Bank));
\r
837 assert_param(IS_FSMC_IT(FSMC_IT));
\r
839 if(FSMC_Bank == FSMC_Bank2_NAND)
\r
841 FSMC_Bank2->SR2 &= ~(FSMC_IT >> 3);
\r
843 else if(FSMC_Bank == FSMC_Bank3_NAND)
\r
845 FSMC_Bank3->SR3 &= ~(FSMC_IT >> 3);
\r
847 /* FSMC_Bank4_PCCARD*/
\r
850 FSMC_Bank4->SR4 &= ~(FSMC_IT >> 3);
\r
866 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
\r