20 .sdcr = (uint32_t) (FMC_ColumnBits_Number_8b |
21 FMC_RowBits_Number_12b |
22 FMC_SDMemory_Width_16b |
23 FMC_InternalBank_Number_4 |
25 FMC_Write_Protection_Disable |
26 FMC_SDClock_Period_2 |
27 FMC_Read_Burst_Disable |
28 FMC_ReadPipe_Delay_1),
30 .sdtr = (uint32_t)( (2 - 1) |
38 .sdcmr = (uint32_t)(((4 - 1) << 5) |
39 ((FMC_SDCMR_MRD_BURST_LENGTH_2 |
40 FMC_SDCMR_MRD_BURST_TYPE_SEQUENTIAL |
41 FMC_SDCMR_MRD_CAS_LATENCY_3 |
42 FMC_SDCMR_MRD_OPERATING_MODE_STANDARD |
43 FMC_SDCMR_MRD_WRITEBURST_MODE_SINGLE) << 9)),
49 .sdrtr = (uint32_t)(683 << 1),
121 {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
122 VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH},
125 {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR,
126 VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH},
129 {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR,
130 VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH},
133 {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR,
134 VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH},
137 {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR,
138 VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH},
141 {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR,
142 VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH},
145 {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR,
146 VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH},
149 {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR,
150 VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH},
153 {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
154 VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH},
157 {VAL_GPIOJ_MODER, VAL_GPIOJ_OTYPER, VAL_GPIOJ_OSPEEDR, VAL_GPIOJ_PUPDR,
158 VAL_GPIOJ_ODR, VAL_GPIOJ_AFRL, VAL_GPIOJ_AFRH},
161 {VAL_GPIOK_MODER, VAL_GPIOK_OTYPER, VAL_GPIOK_OSPEEDR, VAL_GPIOK_PUPDR,
162 VAL_GPIOK_ODR, VAL_GPIOK_AFRL, VAL_GPIOK_AFRH}
262 uint32_t command_target = 0;
267 rccEnableFSMC(FALSE);
269 SDRAM->SDCR1 =
config->sdcr;
270 SDRAM->SDTR1 =
config->sdtr;
271 SDRAM->SDCR2 =
config->sdcr;
272 SDRAM->SDTR2 =
config->sdtr;
274#if STM32_SDRAM_USE_SDRAM1
275 command_target |= FMC_SDCMR_CTB1;
277#if STM32_SDRAM_USE_SDRAM2
278 command_target |= FMC_SDCMR_CTB2;
283 SDRAM->SDCMR = FMCCM_CLK_ENABLED | command_target;
290 SDRAM->SDCMR = FMCCM_PALL | command_target;
294 SDRAM->SDCMR = FMCCM_AUTO_REFRESH | command_target |
295 (
config->sdcmr & FMC_SDCMR_NRFS);
299 SDRAM->SDCMR = FMCCM_AUTO_REFRESH | command_target |
300 (
config->sdcmr & FMC_SDCMR_NRFS);
304 SDRAM->SDCMR = FMCCM_LOAD_MODE | command_target |
305 (
config->sdcmr & FMC_SDCMR_MRD);
309 SDRAM->SDRTR =
config->sdrtr & FMC_SDRTR_COUNT;