stm32f10x_fsmc.c 34 KB

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