62 #if defined(HAL_NOR_MODULE_ENABLED) || defined(HAL_NAND_MODULE_ENABLED) || defined(HAL_PCCARD_MODULE_ENABLED) \
63 || defined(HAL_SRAM_MODULE_ENABLED)
79 #if defined(FSMC_Bank1)
85 #define BTR_CLEAR_MASK ((uint32_t)(FSMC_BTR1_ADDSET | FSMC_BTR1_ADDHLD |\
86 FSMC_BTR1_DATAST | FSMC_BTR1_BUSTURN |\
87 FSMC_BTR1_CLKDIV | FSMC_BTR1_DATLAT |\
92 #define BWTR_CLEAR_MASK ((uint32_t)(FSMC_BWTR1_ADDSET | FSMC_BWTR1_ADDHLD |\
93 FSMC_BWTR1_DATAST | FSMC_BWTR1_BUSTURN |\
96 #if defined(FSMC_Bank2_3)
98 #if defined (FSMC_PCR_PWAITEN)
101 #define PCR_CLEAR_MASK ((uint32_t)(FSMC_PCR_PWAITEN | FSMC_PCR_PBKEN | \
102 FSMC_PCR_PTYP | FSMC_PCR_PWID | \
103 FSMC_PCR_ECCEN | FSMC_PCR_TCLR | \
104 FSMC_PCR_TAR | FSMC_PCR_ECCPS))
107 #define PMEM_CLEAR_MASK ((uint32_t)(FSMC_PMEM_MEMSET2 | FSMC_PMEM_MEMWAIT2 |\
108 FSMC_PMEM_MEMHOLD2 | FSMC_PMEM_MEMHIZ2))
112 #define PATT_CLEAR_MASK ((uint32_t)(FSMC_PATT_ATTSET2 | FSMC_PATT_ATTWAIT2 |\
113 FSMC_PATT_ATTHOLD2 | FSMC_PATT_ATTHIZ2))
117 #define PCR_CLEAR_MASK ((uint32_t)(FSMC_PCR2_PWAITEN | FSMC_PCR2_PBKEN | \
118 FSMC_PCR2_PTYP | FSMC_PCR2_PWID | \
119 FSMC_PCR2_ECCEN | FSMC_PCR2_TCLR | \
120 FSMC_PCR2_TAR | FSMC_PCR2_ECCPS))
123 #define PMEM_CLEAR_MASK ((uint32_t)(FSMC_PMEM2_MEMSET2 | FSMC_PMEM2_MEMWAIT2 |\
124 FSMC_PMEM2_MEMHOLD2 | FSMC_PMEM2_MEMHIZ2))
128 #define PATT_CLEAR_MASK ((uint32_t)(FSMC_PATT2_ATTSET2 | FSMC_PATT2_ATTWAIT2 |\
129 FSMC_PATT2_ATTHOLD2 | FSMC_PATT2_ATTHIZ2))
133 #if defined(FSMC_Bank4)
136 #define PCR4_CLEAR_MASK ((uint32_t)(FSMC_PCR4_PWAITEN | FSMC_PCR4_PBKEN | \
137 FSMC_PCR4_PTYP | FSMC_PCR4_PWID | \
138 FSMC_PCR4_ECCEN | FSMC_PCR4_TCLR | \
139 FSMC_PCR4_TAR | FSMC_PCR4_ECCPS))
142 #define PMEM4_CLEAR_MASK ((uint32_t)(FSMC_PMEM4_MEMSET4 | FSMC_PMEM4_MEMWAIT4 |\
143 FSMC_PMEM4_MEMHOLD4 | FSMC_PMEM4_MEMHIZ4))
147 #define PATT4_CLEAR_MASK ((uint32_t)(FSMC_PATT4_ATTSET4 | FSMC_PATT4_ATTWAIT4 |\
148 FSMC_PATT4_ATTHOLD4 | FSMC_PATT4_ATTHIZ4))
152 #define PIO4_CLEAR_MASK ((uint32_t)(FSMC_PIO4_IOSET4 | FSMC_PIO4_IOWAIT4 | \
153 FSMC_PIO4_IOHOLD4 | FSMC_PIO4_IOHIZ4))
170 #if defined(FSMC_Bank1)
223 uint32_t flashaccess;
228 assert_param(IS_FSMC_NORSRAM_DEVICE(Device));
229 assert_param(IS_FSMC_NORSRAM_BANK(Init->
NSBank));
231 assert_param(IS_FSMC_MEMORY(Init->
MemoryType));
235 #if defined(FSMC_BCR1_WRAPMOD)
236 assert_param(IS_FSMC_WRAP_MODE(Init->
WrapMode));
240 assert_param(IS_FSMC_WAITE_SIGNAL(Init->
WaitSignal));
241 assert_param(IS_FSMC_EXTENDED_MODE(Init->
ExtendedMode));
243 assert_param(IS_FSMC_WRITE_BURST(Init->
WriteBurst));
244 #if defined(FSMC_BCR1_CCLKEN)
247 #if defined(FSMC_BCR1_WFDIS)
248 assert_param(IS_FSMC_WRITE_FIFO(Init->
WriteFifo));
250 assert_param(IS_FSMC_PAGESIZE(Init->
PageSize));
253 __FSMC_NORSRAM_DISABLE(Device, Init->
NSBank);
258 flashaccess = FSMC_NORSRAM_FLASH_ACCESS_ENABLE;
262 flashaccess = FSMC_NORSRAM_FLASH_ACCESS_DISABLE;
265 btcr_reg = (flashaccess | \
266 Init->DataAddressMux | \
268 Init->MemoryDataWidth | \
269 Init->BurstAccessMode | \
270 Init->WaitSignalPolarity | \
271 Init->WaitSignalActive | \
272 Init->WriteOperation | \
274 Init->ExtendedMode | \
275 Init->AsynchronousWait | \
278 #if defined(FSMC_BCR1_WRAPMOD)
281 #if defined(FSMC_BCR1_CCLKEN)
284 #if defined(FSMC_BCR1_WFDIS)
289 mask = (FSMC_BCR1_MBKEN |
300 FSMC_BCR1_ASYNCWAIT |
303 #if defined(FSMC_BCR1_WRAPMOD)
304 mask |= FSMC_BCR1_WRAPMOD;
306 #if defined(FSMC_BCR1_CCLKEN)
307 mask |= FSMC_BCR1_CCLKEN;
309 #if defined(FSMC_BCR1_WFDIS)
310 mask |= FSMC_BCR1_WFDIS;
312 mask |= FSMC_BCR1_CPSIZE;
314 MODIFY_REG(Device->BTCR[Init->
NSBank], mask, btcr_reg);
316 #if defined(FSMC_BCR1_CCLKEN)
318 if ((Init->
ContinuousClock == FSMC_CONTINUOUS_CLOCK_SYNC_ASYNC) && (Init->
NSBank != FSMC_NORSRAM_BANK1))
320 MODIFY_REG(Device->BTCR[FSMC_NORSRAM_BANK1], FSMC_BCR1_CCLKEN, Init->
ContinuousClock);
323 #if defined(FSMC_BCR1_WFDIS)
325 if (Init->
NSBank != FSMC_NORSRAM_BANK1)
328 SET_BIT(Device->BTCR[FSMC_NORSRAM_BANK1], (uint32_t)(Init->
WriteFifo));
343 FSMC_NORSRAM_EXTENDED_TypeDef *ExDevice, uint32_t Bank)
346 assert_param(IS_FSMC_NORSRAM_DEVICE(Device));
347 assert_param(IS_FSMC_NORSRAM_EXTENDED_DEVICE(ExDevice));
348 assert_param(IS_FSMC_NORSRAM_BANK(Bank));
351 __FSMC_NORSRAM_DISABLE(Device, Bank);
355 if (Bank == FSMC_NORSRAM_BANK1)
357 Device->BTCR[Bank] = 0x000030DBU;
362 Device->BTCR[Bank] = 0x000030D2U;
365 Device->BTCR[Bank + 1U] = 0x0FFFFFFFU;
366 ExDevice->BWTR[Bank] = 0x0FFFFFFFU;
382 #if defined(FSMC_BCR1_CCLKEN)
387 assert_param(IS_FSMC_NORSRAM_DEVICE(Device));
392 assert_param(IS_FSMC_CLK_DIV(Timing->
CLKDivision));
393 assert_param(IS_FSMC_DATA_LATENCY(Timing->
DataLatency));
394 assert_param(IS_FSMC_ACCESS_MODE(Timing->
AccessMode));
395 assert_param(IS_FSMC_NORSRAM_BANK(Bank));
398 MODIFY_REG(Device->BTCR[Bank + 1U], BTR_CLEAR_MASK, (Timing->
AddressSetupTime |
402 (((Timing->
CLKDivision) - 1U) << FSMC_BTR1_CLKDIV_Pos) |
403 (((Timing->
DataLatency) - 2U) << FSMC_BTR1_DATLAT_Pos) |
406 #if defined(FSMC_BCR1_CCLKEN)
408 if (HAL_IS_BIT_SET(Device->BTCR[FSMC_NORSRAM_BANK1], FSMC_BCR1_CCLKEN))
410 tmpr = (uint32_t)(Device->BTCR[FSMC_NORSRAM_BANK1 + 1U] & ~((0x0FU) << FSMC_BTR1_CLKDIV_Pos));
411 tmpr |= (uint32_t)(((Timing->
CLKDivision) - 1U) << FSMC_BTR1_CLKDIV_Pos);
412 MODIFY_REG(Device->BTCR[FSMC_NORSRAM_BANK1 + 1U], FSMC_BTR1_CLKDIV, tmpr);
433 uint32_t ExtendedMode)
436 assert_param(IS_FSMC_EXTENDED_MODE(ExtendedMode));
439 if (ExtendedMode == FSMC_EXTENDED_MODE_ENABLE)
442 assert_param(IS_FSMC_NORSRAM_EXTENDED_DEVICE(Device));
447 assert_param(IS_FSMC_ACCESS_MODE(Timing->
AccessMode));
448 assert_param(IS_FSMC_NORSRAM_BANK(Bank));
459 Device->BWTR[Bank] = 0x0FFFFFFFU;
492 assert_param(IS_FSMC_NORSRAM_DEVICE(Device));
493 assert_param(IS_FSMC_NORSRAM_BANK(Bank));
496 SET_BIT(Device->BTCR[Bank], FSMC_WRITE_OPERATION_ENABLE);
510 assert_param(IS_FSMC_NORSRAM_DEVICE(Device));
511 assert_param(IS_FSMC_NORSRAM_BANK(Bank));
514 CLEAR_BIT(Device->BTCR[Bank], FSMC_WRITE_OPERATION_ENABLE);
528 #if defined(FSMC_Bank2_3)
582 assert_param(IS_FSMC_NAND_DEVICE(Device));
583 assert_param(IS_FSMC_NAND_BANK(Init->
NandBank));
584 assert_param(IS_FSMC_WAIT_FEATURE(Init->
Waitfeature));
587 assert_param(IS_FSMC_ECCPAGE_SIZE(Init->
ECCPageSize));
592 if (Init->
NandBank == FSMC_NAND_BANK2)
595 MODIFY_REG(Device->PCR2, PCR_CLEAR_MASK, (Init->
Waitfeature |
596 FSMC_PCR_MEMORY_TYPE_NAND |
606 MODIFY_REG(Device->PCR3, PCR_CLEAR_MASK, (Init->
Waitfeature |
607 FSMC_PCR_MEMORY_TYPE_NAND |
630 assert_param(IS_FSMC_NAND_DEVICE(Device));
631 assert_param(IS_FSMC_SETUP_TIME(Timing->
SetupTime));
635 assert_param(IS_FSMC_NAND_BANK(Bank));
638 if (Bank == FSMC_NAND_BANK2)
641 MODIFY_REG(Device->PMEM2, PMEM_CLEAR_MASK, (Timing->
SetupTime |
649 MODIFY_REG(Device->PMEM3, PMEM_CLEAR_MASK, (Timing->
SetupTime |
670 assert_param(IS_FSMC_NAND_DEVICE(Device));
671 assert_param(IS_FSMC_SETUP_TIME(Timing->
SetupTime));
675 assert_param(IS_FSMC_NAND_BANK(Bank));
678 if (Bank == FSMC_NAND_BANK2)
681 MODIFY_REG(Device->PATT2, PATT_CLEAR_MASK, (Timing->
SetupTime |
689 MODIFY_REG(Device->PATT3, PATT_CLEAR_MASK, (Timing->
SetupTime |
707 assert_param(IS_FSMC_NAND_DEVICE(Device));
708 assert_param(IS_FSMC_NAND_BANK(Bank));
711 __FSMC_NAND_DISABLE(Device, Bank);
714 if (Bank == FSMC_NAND_BANK2)
717 WRITE_REG(Device->PCR2, 0x00000018U);
718 WRITE_REG(Device->SR2, 0x00000040U);
719 WRITE_REG(Device->PMEM2, 0xFCFCFCFCU);
720 WRITE_REG(Device->PATT2, 0xFCFCFCFCU);
726 WRITE_REG(Device->PCR3, 0x00000018U);
727 WRITE_REG(Device->SR3, 0x00000040U);
728 WRITE_REG(Device->PMEM3, 0xFCFCFCFCU);
729 WRITE_REG(Device->PATT3, 0xFCFCFCFCU);
764 assert_param(IS_FSMC_NAND_DEVICE(Device));
765 assert_param(IS_FSMC_NAND_BANK(Bank));
768 if (Bank == FSMC_NAND_BANK2)
770 SET_BIT(Device->PCR2, FSMC_PCR2_ECCEN);
774 SET_BIT(Device->PCR3, FSMC_PCR2_ECCEN);
790 assert_param(IS_FSMC_NAND_DEVICE(Device));
791 assert_param(IS_FSMC_NAND_BANK(Bank));
794 if (Bank == FSMC_NAND_BANK2)
796 CLEAR_BIT(Device->PCR2, FSMC_PCR2_ECCEN);
800 CLEAR_BIT(Device->PCR3, FSMC_PCR2_ECCEN);
814 HAL_StatusTypeDef
FSMC_NAND_GetECC(FSMC_NAND_TypeDef *Device, uint32_t *ECCval, uint32_t Bank,
820 assert_param(IS_FSMC_NAND_DEVICE(Device));
821 assert_param(IS_FSMC_NAND_BANK(Bank));
827 while (__FSMC_NAND_GET_FLAG(Device, Bank, FSMC_FLAG_FEMPT) == RESET)
830 if (Timeout != HAL_MAX_DELAY)
832 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
839 if (Bank == FSMC_NAND_BANK2)
842 *ECCval = (uint32_t)Device->ECCR2;
847 *ECCval = (uint32_t)Device->ECCR3;
858 #if defined(FSMC_Bank4)
910 assert_param(IS_FSMC_PCCARD_DEVICE(Device));
911 #if defined(FSMC_Bank2_3)
912 assert_param(IS_FSMC_WAIT_FEATURE(Init->
Waitfeature));
918 MODIFY_REG(Device->PCR4,
924 (FSMC_PCR_MEMORY_TYPE_PCCARD |
926 FSMC_NAND_PCC_MEM_BUS_WIDTH_16 |
944 assert_param(IS_FSMC_PCCARD_DEVICE(Device));
945 #if defined(FSMC_Bank2_3)
946 assert_param(IS_FSMC_SETUP_TIME(Timing->
SetupTime));
953 MODIFY_REG(Device->PMEM4, PMEM4_CLEAR_MASK,
973 assert_param(IS_FSMC_PCCARD_DEVICE(Device));
974 #if defined(FSMC_Bank2_3)
975 assert_param(IS_FSMC_SETUP_TIME(Timing->
SetupTime));
982 MODIFY_REG(Device->PATT4, PATT4_CLEAR_MASK,
1002 assert_param(IS_FSMC_PCCARD_DEVICE(Device));
1003 #if defined(FSMC_Bank2_3)
1004 assert_param(IS_FSMC_SETUP_TIME(Timing->
SetupTime));
1011 MODIFY_REG(Device->PIO4, PIO4_CLEAR_MASK,
1028 assert_param(IS_FSMC_PCCARD_DEVICE(Device));
1031 __FSMC_PCCARD_DISABLE(Device);
1034 Device->PCR4 = 0x00000018U;
1035 Device->SR4 = 0x00000040U;
1036 Device->PMEM4 = 0xFCFCFCFCU;
1037 Device->PATT4 = 0xFCFCFCFCU;
1038 Device->PIO4 = 0xFCFCFCFCU;
uint32_t AsynchronousWait
uint32_t WaitSignalPolarity
uint32_t AddressSetupTime
uint32_t BusTurnAroundDuration
uint32_t WaitSignalActive
FSMC NAND Configuration Structure definition.
FSMC NAND Timing parameters structure definition.
FSMC NORSRAM Configuration Structure definition.
FSMC NORSRAM Timing parameters structure definition.
FSMC PCCARD Configuration Structure definition.
HAL_StatusTypeDef FSMC_NAND_AttributeSpace_Timing_Init(FSMC_NAND_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing, uint32_t Bank)
Initializes the FSMC_NAND Attribute space Timing according to the specified parameters in the FSMC_NA...
HAL_StatusTypeDef FSMC_NAND_DeInit(FSMC_NAND_TypeDef *Device, uint32_t Bank)
DeInitializes the FSMC_NAND device.
HAL_StatusTypeDef FSMC_NAND_Init(FSMC_NAND_TypeDef *Device, FSMC_NAND_InitTypeDef *Init)
Initializes the FSMC_NAND device according to the specified control parameters in the FSMC_NAND_Handl...
HAL_StatusTypeDef FSMC_NAND_CommonSpace_Timing_Init(FSMC_NAND_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing, uint32_t Bank)
Initializes the FSMC_NAND Common space Timing according to the specified parameters in the FSMC_NAND_...
HAL_StatusTypeDef FSMC_NORSRAM_Init(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_InitTypeDef *Init)
Initialize the FSMC_NORSRAM device according to the specified control parameters in the FSMC_NORSRAM_...
HAL_StatusTypeDef FSMC_NORSRAM_Extended_Timing_Init(FSMC_NORSRAM_EXTENDED_TypeDef *Device, FSMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank, uint32_t ExtendedMode)
Initialize the FSMC_NORSRAM Extended mode Timing according to the specified parameters in the FSMC_NO...
HAL_StatusTypeDef FSMC_NORSRAM_DeInit(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_EXTENDED_TypeDef *ExDevice, uint32_t Bank)
DeInitialize the FSMC_NORSRAM peripheral.
HAL_StatusTypeDef FSMC_NORSRAM_Timing_Init(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank)
Initialize the FSMC_NORSRAM Timing according to the specified parameters in the FSMC_NORSRAM_TimingTy...
HAL_StatusTypeDef FSMC_NORSRAM_WriteOperation_Enable(FSMC_NORSRAM_TypeDef *Device, uint32_t Bank)
Enables dynamically FSMC_NORSRAM write operation.
HAL_StatusTypeDef FSMC_NORSRAM_WriteOperation_Disable(FSMC_NORSRAM_TypeDef *Device, uint32_t Bank)
Disables dynamically FSMC_NORSRAM write operation.
HAL_StatusTypeDef FSMC_PCCARD_DeInit(FSMC_PCCARD_TypeDef *Device)
DeInitializes the FSMC_PCCARD device.
HAL_StatusTypeDef FSMC_PCCARD_Init(FSMC_PCCARD_TypeDef *Device, FSMC_PCCARD_InitTypeDef *Init)
Initializes the FSMC_PCCARD device according to the specified control parameters in the FSMC_PCCARD_H...
HAL_StatusTypeDef FSMC_PCCARD_IOSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing)
Initializes the FSMC_PCCARD IO space Timing according to the specified parameters in the FSMC_NAND_PC...
HAL_StatusTypeDef FSMC_PCCARD_AttributeSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing)
Initializes the FSMC_PCCARD Attribute space Timing according to the specified parameters in the FSMC_...
HAL_StatusTypeDef FSMC_PCCARD_CommonSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing)
Initializes the FSMC_PCCARD Common space Timing according to the specified parameters in the FSMC_NAN...
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
HAL_StatusTypeDef FSMC_NAND_ECC_Enable(FSMC_NAND_TypeDef *Device, uint32_t Bank)
Enables dynamically FSMC_NAND ECC feature.
HAL_StatusTypeDef FSMC_NAND_ECC_Disable(FSMC_NAND_TypeDef *Device, uint32_t Bank)
Disables dynamically FSMC_NAND ECC feature.
HAL_StatusTypeDef FSMC_NAND_GetECC(FSMC_NAND_TypeDef *Device, uint32_t *ECCval, uint32_t Bank, uint32_t Timeout)
Disables dynamically FSMC_NAND ECC feature.
This file contains all the functions prototypes for the HAL module driver.