STM32L4xx_HAL_Driver  1.14.0
stm32l4xx_ll_fmc.c
Go to the documentation of this file.
1 
55 /* Includes ------------------------------------------------------------------*/
56 #include "stm32l4xx_hal.h"
57 
62 #if defined(HAL_SRAM_MODULE_ENABLED) || defined(HAL_NOR_MODULE_ENABLED) || defined(HAL_PCCARD_MODULE_ENABLED) || defined(HAL_NAND_MODULE_ENABLED)
63 
69 /* Private typedef -----------------------------------------------------------*/
70 /* Private define ------------------------------------------------------------*/
71 
76 /* ----------------------- FMC registers bit mask --------------------------- */
77 
78 #if defined(FMC_BANK1)
79 /* --- BCR Register ---*/
80 /* BCR register clear mask */
81 #if defined(FMC_BCRx_NBLSET)
82 #if defined(FMC_BCR1_WFDIS)
83 #define BCR_CLEAR_MASK ((uint32_t)(FMC_BCRx_MBKEN | FMC_BCRx_MUXEN |\
84  FMC_BCRx_MTYP | FMC_BCRx_MWID |\
85  FMC_BCRx_FACCEN | FMC_BCRx_BURSTEN |\
86  FMC_BCRx_WAITPOL | FMC_BCRx_WAITCFG |\
87  FMC_BCRx_WREN | FMC_BCRx_WAITEN |\
88  FMC_BCRx_EXTMOD | FMC_BCRx_ASYNCWAIT |\
89  FMC_BCRx_CPSIZE | FMC_BCRx_CBURSTRW |\
90  FMC_BCR1_CCLKEN | FMC_BCR1_WFDIS |\
91  FMC_BCRx_NBLSET))
92 #else
93 #define BCR_CLEAR_MASK ((uint32_t)(FMC_BCRx_MBKEN | FMC_BCRx_MUXEN |\
94  FMC_BCRx_MTYP | FMC_BCRx_MWID |\
95  FMC_BCRx_FACCEN | FMC_BCRx_BURSTEN |\
96  FMC_BCRx_WAITPOL | FMC_BCRx_WAITCFG |\
97  FMC_BCRx_WREN | FMC_BCRx_WAITEN |\
98  FMC_BCRx_EXTMOD | FMC_BCRx_ASYNCWAIT |\
99  FMC_BCRx_CPSIZE | FMC_BCRx_CBURSTRW |\
100  FMC_BCR1_CCLKEN | FMC_BCRx_NBLSET))
101 #endif /* FMC_BCR1_WFDIS */
102 #else
103 #if defined(FMC_BCR1_WFDIS)
104 #define BCR_CLEAR_MASK ((uint32_t)(FMC_BCRx_MBKEN | FMC_BCRx_MUXEN |\
105  FMC_BCRx_MTYP | FMC_BCRx_MWID |\
106  FMC_BCRx_FACCEN | FMC_BCRx_BURSTEN |\
107  FMC_BCRx_WAITPOL | FMC_BCRx_WAITCFG |\
108  FMC_BCRx_WREN | FMC_BCRx_WAITEN |\
109  FMC_BCRx_EXTMOD | FMC_BCRx_ASYNCWAIT |\
110  FMC_BCRx_CPSIZE | FMC_BCRx_CBURSTRW |\
111  FMC_BCR1_CCLKEN | FMC_BCR1_WFDIS))
112 #else
113 #define BCR_CLEAR_MASK ((uint32_t)(FMC_BCRx_MBKEN | FMC_BCRx_MUXEN |\
114  FMC_BCRx_MTYP | FMC_BCRx_MWID |\
115  FMC_BCRx_FACCEN | FMC_BCRx_BURSTEN |\
116  FMC_BCRx_WAITPOL | FMC_BCRx_WAITCFG |\
117  FMC_BCRx_WREN | FMC_BCRx_WAITEN |\
118  FMC_BCRx_EXTMOD | FMC_BCRx_ASYNCWAIT |\
119  FMC_BCRx_CPSIZE | FMC_BCRx_CBURSTRW |\
120  FMC_BCR1_CCLKEN))
121 #endif /* FMC_BCR1_WFDIS */
122 #endif /* FMC_BCRx_NBLSET */
123 
124 /* --- BTR Register ---*/
125 /* BTR register clear mask */
126 #if defined(FMC_BTRx_DATAHLD)
127 #define BTR_CLEAR_MASK ((uint32_t)(FMC_BTRx_ADDSET | FMC_BTRx_ADDHLD |\
128  FMC_BTRx_DATAST | FMC_BTRx_BUSTURN |\
129  FMC_BTRx_CLKDIV | FMC_BTRx_DATLAT |\
130  FMC_BTRx_ACCMOD | FMC_BTRx_DATAHLD))
131 #else
132 #define BTR_CLEAR_MASK ((uint32_t)(FMC_BTRx_ADDSET | FMC_BTRx_ADDHLD |\
133  FMC_BTRx_DATAST | FMC_BTRx_BUSTURN |\
134  FMC_BTRx_CLKDIV | FMC_BTRx_DATLAT |\
135  FMC_BTRx_ACCMOD))
136 #endif /* FMC_BTRx_DATAHLD */
137 
138 /* --- BWTR Register ---*/
139 /* BWTR register clear mask */
140 #if defined(FMC_BWTRx_DATAHLD)
141 #define BWTR_CLEAR_MASK ((uint32_t)(FMC_BWTRx_ADDSET | FMC_BWTRx_ADDHLD |\
142  FMC_BWTRx_DATAST | FMC_BWTRx_BUSTURN |\
143  FMC_BWTRx_ACCMOD | FMC_BWTRx_DATAHLD))
144 #else
145 #define BWTR_CLEAR_MASK ((uint32_t)(FMC_BWTRx_ADDSET | FMC_BWTRx_ADDHLD |\
146  FMC_BWTRx_DATAST | FMC_BWTRx_BUSTURN |\
147  FMC_BWTRx_ACCMOD))
148 #endif /* FMC_BWTRx_DATAHLD */
149 #endif /* FMC_BANK1 */
150 #if defined(FMC_BANK3)
151 
152 /* --- PCR Register ---*/
153 /* PCR register clear mask */
154 #define PCR_CLEAR_MASK ((uint32_t)(FMC_PCR_PWAITEN | FMC_PCR_PBKEN | \
155  FMC_PCR_PTYP | FMC_PCR_PWID | \
156  FMC_PCR_ECCEN | FMC_PCR_TCLR | \
157  FMC_PCR_TAR | FMC_PCR_ECCPS))
158 
159 /* --- PMEM Register ---*/
160 /* PMEM register clear mask */
161 #define PMEM_CLEAR_MASK ((uint32_t)(FMC_PMEM_MEMSET | FMC_PMEM_MEMWAIT |\
162  FMC_PMEM_MEMHOLD | FMC_PMEM_MEMHIZ))
163 
164 /* --- PATT Register ---*/
165 /* PATT register clear mask */
166 #define PATT_CLEAR_MASK ((uint32_t)(FMC_PATT_ATTSET | FMC_PATT_ATTWAIT |\
167  FMC_PATT_ATTHOLD | FMC_PATT_ATTHIZ))
168 
169 #endif /* FMC_BANK3 */
170 
175 /* Private macro -------------------------------------------------------------*/
176 /* Private variables ---------------------------------------------------------*/
177 /* Private function prototypes -----------------------------------------------*/
178 /* Exported functions --------------------------------------------------------*/
179 
184 #if defined(FMC_BANK1)
185 
234 HAL_StatusTypeDef FMC_NORSRAM_Init(FMC_NORSRAM_TypeDef *Device, FMC_NORSRAM_InitTypeDef *Init)
235 {
236  uint32_t flashaccess;
237 
238  /* Check the parameters */
239  assert_param(IS_FMC_NORSRAM_DEVICE(Device));
240  assert_param(IS_FMC_NORSRAM_BANK(Init->NSBank));
241  assert_param(IS_FMC_MUX(Init->DataAddressMux));
242  assert_param(IS_FMC_MEMORY(Init->MemoryType));
243  assert_param(IS_FMC_NORSRAM_MEMORY_WIDTH(Init->MemoryDataWidth));
244  assert_param(IS_FMC_BURSTMODE(Init->BurstAccessMode));
245  assert_param(IS_FMC_WAIT_POLARITY(Init->WaitSignalPolarity));
246  assert_param(IS_FMC_WAIT_SIGNAL_ACTIVE(Init->WaitSignalActive));
247  assert_param(IS_FMC_WRITE_OPERATION(Init->WriteOperation));
248  assert_param(IS_FMC_WAITE_SIGNAL(Init->WaitSignal));
249  assert_param(IS_FMC_EXTENDED_MODE(Init->ExtendedMode));
250  assert_param(IS_FMC_ASYNWAIT(Init->AsynchronousWait));
251  assert_param(IS_FMC_WRITE_BURST(Init->WriteBurst));
252  assert_param(IS_FMC_CONTINOUS_CLOCK(Init->ContinuousClock));
253 #if defined(FMC_BCR1_WFDIS)
254  assert_param(IS_FMC_WRITE_FIFO(Init->WriteFifo));
255 #endif /* FMC_BCR1_WFDIS */
256  assert_param(IS_FMC_PAGESIZE(Init->PageSize));
257 #if defined(FMC_BCRx_NBLSET)
258  assert_param(IS_FMC_NBL_SETUPTIME(Init->NBLSetupTime));
259 #endif /* FMC_BCRx_NBLSET */
260 
261  /* Disable NORSRAM Device */
262  __FMC_NORSRAM_DISABLE(Device, Init->NSBank);
263 
264  /* Set NORSRAM device control parameters */
265  if (Init->MemoryType == FMC_MEMORY_TYPE_NOR)
266  {
267  flashaccess = FMC_NORSRAM_FLASH_ACCESS_ENABLE;
268  }
269  else
270  {
271  flashaccess = FMC_NORSRAM_FLASH_ACCESS_DISABLE;
272  }
273 
274  MODIFY_REG(Device->BTCR[Init->NSBank], BCR_CLEAR_MASK, (flashaccess |
275  Init->DataAddressMux |
276  Init->MemoryType |
277  Init->MemoryDataWidth |
278  Init->BurstAccessMode |
279  Init->WaitSignalPolarity |
280  Init->WaitSignalActive |
281  Init->WriteOperation |
282  Init->WaitSignal |
283  Init->ExtendedMode |
284  Init->AsynchronousWait |
285  Init->WriteBurst |
286  Init->ContinuousClock |
287 #if defined(FMC_BCR1_WFDIS)
288  Init->WriteFifo |
289 #endif /* FMC_BCR1_WFDIS */
290 #if defined(FMC_BCRx_NBLSET)
291  Init->NBLSetupTime |
292 #endif /* FMC_BCRx_NBLSET */
293  Init->PageSize));
294 
295  /* Configure synchronous mode when Continuous clock is enabled for bank2..4 */
296  if ((Init->ContinuousClock == FMC_CONTINUOUS_CLOCK_SYNC_ASYNC) && (Init->NSBank != FMC_NORSRAM_BANK1))
297  {
298  MODIFY_REG(Device->BTCR[FMC_NORSRAM_BANK1], FMC_BCR1_CCLKEN, Init->ContinuousClock);
299  }
300 
301 #if defined(FMC_BCR1_WFDIS)
302  if (Init->NSBank != FMC_NORSRAM_BANK1)
303  {
304  /* Configure Write FIFO mode when Write Fifo is enabled for bank2..4 */
305  SET_BIT(Device->BTCR[FMC_NORSRAM_BANK1], (uint32_t)(Init->WriteFifo));
306  }
307 #endif /* FMC_BCR1_WFDIS */
308 
309  return HAL_OK;
310 }
311 
312 
320 HAL_StatusTypeDef FMC_NORSRAM_DeInit(FMC_NORSRAM_TypeDef *Device, FMC_NORSRAM_EXTENDED_TypeDef *ExDevice, uint32_t Bank)
321 {
322  /* Check the parameters */
323  assert_param(IS_FMC_NORSRAM_DEVICE(Device));
324  assert_param(IS_FMC_NORSRAM_EXTENDED_DEVICE(ExDevice));
325  assert_param(IS_FMC_NORSRAM_BANK(Bank));
326 
327  /* Disable the FMC_NORSRAM device */
328  __FMC_NORSRAM_DISABLE(Device, Bank);
329 
330  /* De-initialize the FMC_NORSRAM device */
331  /* FMC_NORSRAM_BANK1 */
332  if (Bank == FMC_NORSRAM_BANK1)
333  {
334  Device->BTCR[Bank] = 0x000030DBU;
335  }
336  /* FMC_NORSRAM_BANK2, FMC_NORSRAM_BANK3 or FMC_NORSRAM_BANK4 */
337  else
338  {
339  Device->BTCR[Bank] = 0x000030D2U;
340  }
341 
342  Device->BTCR[Bank + 1] = 0x0FFFFFFFU;
343  ExDevice->BWTR[Bank] = 0x0FFFFFFFU;
344 
345  return HAL_OK;
346 }
347 
348 
357 HAL_StatusTypeDef FMC_NORSRAM_Timing_Init(FMC_NORSRAM_TypeDef *Device, FMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank)
358 {
359  uint32_t tmpr = 0;
360 
361  /* Check the parameters */
362  assert_param(IS_FMC_NORSRAM_DEVICE(Device));
363  assert_param(IS_FMC_ADDRESS_SETUP_TIME(Timing->AddressSetupTime));
364  assert_param(IS_FMC_ADDRESS_HOLD_TIME(Timing->AddressHoldTime));
365 #if defined(FMC_BTRx_DATAHLD)
366  assert_param(IS_FMC_DATAHOLD_DURATION(Timing->DataHoldTime));
367 #endif /* FMC_BTRx_DATAHLD */
368  assert_param(IS_FMC_DATASETUP_TIME(Timing->DataSetupTime));
369  assert_param(IS_FMC_TURNAROUND_TIME(Timing->BusTurnAroundDuration));
370  assert_param(IS_FMC_CLK_DIV(Timing->CLKDivision));
371  assert_param(IS_FMC_DATA_LATENCY(Timing->DataLatency));
372  assert_param(IS_FMC_ACCESS_MODE(Timing->AccessMode));
373  assert_param(IS_FMC_NORSRAM_BANK(Bank));
374 
375  /* Set FMC_NORSRAM device timing parameters */
376  MODIFY_REG(Device->BTCR[Bank + 1], BTR_CLEAR_MASK, (Timing->AddressSetupTime |
377  ((Timing->AddressHoldTime) << FMC_BTRx_ADDHLD_Pos) |
378  ((Timing->DataSetupTime) << FMC_BTRx_DATAST_Pos) |
379 #if defined(FMC_BTRx_DATAHLD)
380  ((Timing->DataHoldTime) << FMC_BTRx_DATAHLD_Pos) |
381 #endif /* FMC_BTRx_DATAHLD */
382  ((Timing->BusTurnAroundDuration) << FMC_BTRx_BUSTURN_Pos) |
383  (((Timing->CLKDivision) - 1) << FMC_BTRx_CLKDIV_Pos) |
384  (((Timing->DataLatency) - 2) << FMC_BTRx_DATLAT_Pos) |
385  (Timing->AccessMode)));
386 
387  /* Configure Clock division value (in NORSRAM bank 1) when continuous clock is enabled */
388  if (HAL_IS_BIT_SET(Device->BTCR[FMC_NORSRAM_BANK1], FMC_BCR1_CCLKEN))
389  {
390  tmpr = (uint32_t)(Device->BTCR[FMC_NORSRAM_BANK1 + 1] & ~(((uint32_t)0x0F) << FMC_BTRx_CLKDIV_Pos));
391  tmpr |= (uint32_t)(((Timing->CLKDivision) - 1) << FMC_BTRx_CLKDIV_Pos);
392  MODIFY_REG(Device->BTCR[FMC_NORSRAM_BANK1 + 1], FMC_BTRx_CLKDIV, tmpr);
393  }
394 
395  return HAL_OK;
396 }
397 
410 HAL_StatusTypeDef FMC_NORSRAM_Extended_Timing_Init(FMC_NORSRAM_EXTENDED_TypeDef *Device, FMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank, uint32_t ExtendedMode)
411 {
412  /* Check the parameters */
413  assert_param(IS_FMC_EXTENDED_MODE(ExtendedMode));
414 
415  /* Set NORSRAM device timing register for write configuration, if extended mode is used */
416  if (ExtendedMode == FMC_EXTENDED_MODE_ENABLE)
417  {
418  /* Check the parameters */
419  assert_param(IS_FMC_NORSRAM_EXTENDED_DEVICE(Device));
420  assert_param(IS_FMC_ADDRESS_SETUP_TIME(Timing->AddressSetupTime));
421  assert_param(IS_FMC_ADDRESS_HOLD_TIME(Timing->AddressHoldTime));
422  assert_param(IS_FMC_DATASETUP_TIME(Timing->DataSetupTime));
423 #if defined(FMC_BTRx_DATAHLD)
424  assert_param(IS_FMC_DATAHOLD_DURATION(Timing->DataHoldTime));
425 #endif /* FMC_BTRx_DATAHLD */
426  assert_param(IS_FMC_TURNAROUND_TIME(Timing->BusTurnAroundDuration));
427  assert_param(IS_FMC_ACCESS_MODE(Timing->AccessMode));
428  assert_param(IS_FMC_NORSRAM_BANK(Bank));
429 
430  /* Set NORSRAM device timing register for write configuration, if extended mode is used */
431  MODIFY_REG(Device->BWTR[Bank], BWTR_CLEAR_MASK, (Timing->AddressSetupTime |
432  ((Timing->AddressHoldTime) << FMC_BWTRx_ADDHLD_Pos) |
433  ((Timing->DataSetupTime) << FMC_BWTRx_DATAST_Pos) |
434 #if defined(FMC_BTRx_DATAHLD)
435  ((Timing->DataHoldTime) << FMC_BWTRx_DATAHLD_Pos) |
436 #endif /* FMC_BTRx_DATAHLD */
437  Timing->AccessMode |
438  ((Timing->BusTurnAroundDuration) << FMC_BWTRx_BUSTURN_Pos)));
439  }
440  else
441  {
442  Device->BWTR[Bank] = 0x0FFFFFFFU;
443  }
444 
445  return HAL_OK;
446 }
472 HAL_StatusTypeDef FMC_NORSRAM_WriteOperation_Enable(FMC_NORSRAM_TypeDef *Device, uint32_t Bank)
473 {
474  /* Check the parameters */
475  assert_param(IS_FMC_NORSRAM_DEVICE(Device));
476  assert_param(IS_FMC_NORSRAM_BANK(Bank));
477 
478  /* Enable write operation */
479  SET_BIT(Device->BTCR[Bank], FMC_WRITE_OPERATION_ENABLE);
480 
481  return HAL_OK;
482 }
483 
490 HAL_StatusTypeDef FMC_NORSRAM_WriteOperation_Disable(FMC_NORSRAM_TypeDef *Device, uint32_t Bank)
491 {
492  /* Check the parameters */
493  assert_param(IS_FMC_NORSRAM_DEVICE(Device));
494  assert_param(IS_FMC_NORSRAM_BANK(Bank));
495 
496  /* Disable write operation */
497  CLEAR_BIT(Device->BTCR[Bank], FMC_WRITE_OPERATION_ENABLE);
498 
499  return HAL_OK;
500 }
501 
509 #endif /* FMC_BANK1 */
510 
511 #if defined(FMC_BANK3)
512 
562 HAL_StatusTypeDef FMC_NAND_Init(FMC_NAND_TypeDef *Device, FMC_NAND_InitTypeDef *Init)
563 {
564  /* Check the parameters */
565  assert_param(IS_FMC_NAND_DEVICE(Device));
566  assert_param(IS_FMC_NAND_BANK(Init->NandBank));
567  assert_param(IS_FMC_WAIT_FEATURE(Init->Waitfeature));
568  assert_param(IS_FMC_NAND_MEMORY_WIDTH(Init->MemoryDataWidth));
569  assert_param(IS_FMC_ECC_STATE(Init->EccComputation));
570  assert_param(IS_FMC_ECCPAGE_SIZE(Init->ECCPageSize));
571  assert_param(IS_FMC_TCLR_TIME(Init->TCLRSetupTime));
572  assert_param(IS_FMC_TAR_TIME(Init->TARSetupTime));
573 
574  /* NAND bank 3 registers configuration */
575  MODIFY_REG(Device->PCR, PCR_CLEAR_MASK, (Init->Waitfeature |
576  FMC_PCR_MEMORY_TYPE_NAND |
577  Init->MemoryDataWidth |
578  Init->EccComputation |
579  Init->ECCPageSize |
580  ((Init->TCLRSetupTime) << FMC_PCR_TCLR_Pos) |
581  ((Init->TARSetupTime) << FMC_PCR_TAR_Pos)));
582 
583  return HAL_OK;
584 }
585 
594 HAL_StatusTypeDef FMC_NAND_CommonSpace_Timing_Init(FMC_NAND_TypeDef *Device, FMC_NAND_PCC_TimingTypeDef *Timing, uint32_t Bank)
595 {
596  /* Check the parameters */
597  assert_param(IS_FMC_NAND_DEVICE(Device));
598  assert_param(IS_FMC_SETUP_TIME(Timing->SetupTime));
599  assert_param(IS_FMC_WAIT_TIME(Timing->WaitSetupTime));
600  assert_param(IS_FMC_HOLD_TIME(Timing->HoldSetupTime));
601  assert_param(IS_FMC_HIZ_TIME(Timing->HiZSetupTime));
602 
603  /* Prevent unused argument(s) compilation warning if no assert_param check */
604  UNUSED(Bank);
605 
606  /* NAND bank 3 registers configuration */
607  MODIFY_REG(Device->PMEM, PMEM_CLEAR_MASK, (Timing->SetupTime |
608  ((Timing->WaitSetupTime) << FMC_PMEM_MEMWAIT_Pos) |
609  ((Timing->HoldSetupTime) << FMC_PMEM_MEMHOLD_Pos) |
610  ((Timing->HiZSetupTime) << FMC_PMEM_MEMHIZ_Pos)));
611 
612  return HAL_OK;
613 }
614 
623 HAL_StatusTypeDef FMC_NAND_AttributeSpace_Timing_Init(FMC_NAND_TypeDef *Device, FMC_NAND_PCC_TimingTypeDef *Timing, uint32_t Bank)
624 {
625  /* Check the parameters */
626  assert_param(IS_FMC_NAND_DEVICE(Device));
627  assert_param(IS_FMC_SETUP_TIME(Timing->SetupTime));
628  assert_param(IS_FMC_WAIT_TIME(Timing->WaitSetupTime));
629  assert_param(IS_FMC_HOLD_TIME(Timing->HoldSetupTime));
630  assert_param(IS_FMC_HIZ_TIME(Timing->HiZSetupTime));
631 
632  /* Prevent unused argument(s) compilation warning if no assert_param check */
633  UNUSED(Bank);
634 
635  /* NAND bank 3 registers configuration */
636  MODIFY_REG(Device->PATT, PATT_CLEAR_MASK, (Timing->SetupTime |
637  ((Timing->WaitSetupTime) << FMC_PATT_ATTWAIT_Pos) |
638  ((Timing->HoldSetupTime) << FMC_PATT_ATTHOLD_Pos) |
639  ((Timing->HiZSetupTime) << FMC_PATT_ATTHIZ_Pos)));
640 
641  return HAL_OK;
642 }
643 
650 HAL_StatusTypeDef FMC_NAND_DeInit(FMC_NAND_TypeDef *Device, uint32_t Bank)
651 {
652  /* Check the parameters */
653  assert_param(IS_FMC_NAND_DEVICE(Device));
654 
655  /* Prevent unused argument(s) compilation warning if no assert_param check */
656  UNUSED(Bank);
657 
658  /* Disable the NAND Bank */
659  __FMC_NAND_DISABLE(Device);
660 
661  /* De-initialize the NAND Bank */
662  /* Set the FMC_NAND_BANK3 registers to their reset values */
663  WRITE_REG(Device->PCR, 0x00000018);
664  WRITE_REG(Device->SR, 0x00000040);
665  WRITE_REG(Device->PMEM, 0xFCFCFCFC);
666  WRITE_REG(Device->PATT, 0xFCFCFCFC);
667 
668  return HAL_OK;
669 }
670 
697 HAL_StatusTypeDef FMC_NAND_ECC_Enable(FMC_NAND_TypeDef *Device, uint32_t Bank)
698 {
699  /* Check the parameters */
700  assert_param(IS_FMC_NAND_DEVICE(Device));
701 
702  /* Prevent unused argument(s) compilation warning if no assert_param check */
703  UNUSED(Bank);
704 
705  /* Enable ECC feature */
706  SET_BIT(Device->PCR, FMC_PCR_ECCEN);
707 
708  return HAL_OK;
709 }
710 
711 
718 HAL_StatusTypeDef FMC_NAND_ECC_Disable(FMC_NAND_TypeDef *Device, uint32_t Bank)
719 {
720  /* Check the parameters */
721  assert_param(IS_FMC_NAND_DEVICE(Device));
722 
723  /* Prevent unused argument(s) compilation warning if no assert_param check */
724  UNUSED(Bank);
725 
726  /* Disable ECC feature */
727  CLEAR_BIT(Device->PCR, FMC_PCR_ECCEN);
728 
729  return HAL_OK;
730 }
731 
740 HAL_StatusTypeDef FMC_NAND_GetECC(FMC_NAND_TypeDef *Device, uint32_t *ECCval, uint32_t Bank, uint32_t Timeout)
741 {
742  uint32_t tickstart = 0;
743 
744  /* Check the parameters */
745  assert_param(IS_FMC_NAND_DEVICE(Device));
746 
747  /* Prevent unused argument(s) compilation warning if no assert_param check */
748  UNUSED(Bank);
749 
750  /* Get tick */
751  tickstart = HAL_GetTick();
752 
753  /* Wait until FIFO is empty */
754  while (__FMC_NAND_GET_FLAG(Device, Bank, FMC_FLAG_FEMPT) == RESET)
755  {
756  /* Check for the Timeout */
757  if (Timeout != HAL_MAX_DELAY)
758  {
759  if ((Timeout == 0) || ((HAL_GetTick() - tickstart) > Timeout))
760  {
761  return HAL_TIMEOUT;
762  }
763  }
764  }
765 
766  /* Get the ECCR register value */
767  *ECCval = (uint32_t)Device->ECCR;
768 
769  return HAL_OK;
770 }
771 
775 #endif /* FMC_BANK3 */
776 
777 
778 
787 #endif /* defined(HAL_SRAM_MODULE_ENABLED) || defined(HAL_NOR_MODULE_ENABLED) || defined(HAL_PCCARD_MODULE_ENABLED) || defined(HAL_NAND_MODULE_ENABLED) */
788 
792 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
HAL_StatusTypeDef FMC_NAND_ECC_Disable(FMC_NAND_TypeDef *Device, uint32_t Bank)
Disables dynamically FMC_NAND ECC feature.
HAL_StatusTypeDef FMC_NAND_Init(FMC_NAND_TypeDef *Device, FMC_NAND_InitTypeDef *Init)
Initializes the FMC_NAND device according to the specified control parameters in the FMC_NAND_HandleT...
HAL_StatusTypeDef FMC_NORSRAM_Timing_Init(FMC_NORSRAM_TypeDef *Device, FMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank)
Initialize the FMC_NORSRAM Timing according to the specified parameters in the FMC_NORSRAM_TimingType...
HAL_StatusTypeDef FMC_NORSRAM_DeInit(FMC_NORSRAM_TypeDef *Device, FMC_NORSRAM_EXTENDED_TypeDef *ExDevice, uint32_t Bank)
DeInitialize the FMC_NORSRAM peripheral.
HAL_StatusTypeDef FMC_NAND_GetECC(FMC_NAND_TypeDef *Device, uint32_t *ECCval, uint32_t Bank, uint32_t Timeout)
Disables dynamically FMC_NAND ECC feature.
This file contains all the functions prototypes for the HAL module driver.
FMC NAND Configuration Structure definition.
HAL_StatusTypeDef FMC_NORSRAM_Extended_Timing_Init(FMC_NORSRAM_EXTENDED_TypeDef *Device, FMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank, uint32_t ExtendedMode)
Initialize the FMC_NORSRAM Extended mode Timing according to the specified parameters in the FMC_NORS...
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
FMC NAND Timing parameters structure definition.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
WWDG_InitTypeDef Init
return HAL_OK
FMC NORSRAM Configuration Structure definition.
HAL_StatusTypeDef FMC_NORSRAM_Init(FMC_NORSRAM_TypeDef *Device, FMC_NORSRAM_InitTypeDef *Init)
Initialize the FMC_NORSRAM device according to the specified control parameters in the FMC_NORSRAM_In...
HAL_StatusTypeDef FMC_NAND_CommonSpace_Timing_Init(FMC_NAND_TypeDef *Device, FMC_NAND_PCC_TimingTypeDef *Timing, uint32_t Bank)
Initializes the FMC_NAND Common space Timing according to the specified parameters in the FMC_NAND_PC...
FMC NORSRAM Timing parameters structure definition.
HAL_StatusTypeDef FMC_NAND_ECC_Enable(FMC_NAND_TypeDef *Device, uint32_t Bank)
Enables dynamically FMC_NAND ECC feature.
HAL_StatusTypeDef FMC_NORSRAM_WriteOperation_Disable(FMC_NORSRAM_TypeDef *Device, uint32_t Bank)
Disables dynamically FMC_NORSRAM write operation.
ADC handle Structure definition.
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
HAL_StatusTypeDef FMC_NAND_DeInit(FMC_NAND_TypeDef *Device, uint32_t Bank)
DeInitializes the FMC_NAND device.
HAL_StatusTypeDef FMC_NORSRAM_WriteOperation_Enable(FMC_NORSRAM_TypeDef *Device, uint32_t Bank)
Enables dynamically FMC_NORSRAM write operation.
HAL_StatusTypeDef FMC_NAND_AttributeSpace_Timing_Init(FMC_NAND_TypeDef *Device, FMC_NAND_PCC_TimingTypeDef *Timing, uint32_t Bank)
Initializes the FMC_NAND Attribute space Timing according to the specified parameters in the FMC_NAND...
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))