@ -39,6 +39,13 @@
# define SDRAM_START_ADDRESS 0xD0000000
# endif
// Provides the MPU_REGION_SIZE_X value when passed the size of region in bytes
// "m" must be a power of 2 between 32 and 4G (2**5 and 2**32) and this formula
// computes the log2 of "m", minus 1
# define MPU_REGION_SIZE(m) (((m) - 1) / (((m) - 1) % 255 + 1) / 255 % 255 * 8 + 7 - 86 / (((m) - 1) % 255 + 12) - 1)
# define SDRAM_MPU_REGION_SIZE (MPU_REGION_SIZE(MICROPY_HW_SDRAM_SIZE))
# ifdef FMC_SDRAM_BANK
static void sdram_init_seq ( SDRAM_HandleTypeDef
@ -244,17 +251,33 @@ static void sdram_init_seq(SDRAM_HandleTypeDef
/* Disable the MPU */
HAL_MPU_Disable ( ) ;
/* Configure the MPU attributes as Write-Through for External SDRAM */
/* Configure the MPU attributes for External SDRAM
Initially disable all access for the entire SDRAM memory space ,
then enable access / caching for the size used
*/
MPU_InitStruct . Enable = MPU_REGION_ENABLE ;
MPU_InitStruct . Number = MPU_REGION_NUMBER4 ;
MPU_InitStruct . BaseAddress = SDRAM_START_ADDRESS ;
MPU_InitStruct . Size = MPU_REGION_SIZE_256MB ;
MPU_InitStruct . AccessPermission = MPU_REGION_FULL _ACCESS ;
MPU_InitStruct . Size = MPU_REGION_SIZE_512 MB ;
MPU_InitStruct . AccessPermission = MPU_REGION_NO _ACCESS ;
MPU_InitStruct . IsBufferable = MPU_ACCESS_NOT_BUFFERABLE ;
MPU_InitStruct . IsCacheable = MPU_ACCESS_CACHEABLE ;
MPU_InitStruct . IsCacheable = MPU_ACCESS_NOT_ CACHEABLE ;
MPU_InitStruct . IsShareable = MPU_ACCESS_NOT_SHAREABLE ;
MPU_InitStruct . Number = MPU_REGION_NUMBER0 ;
MPU_InitStruct . TypeExtField = MPU_TEX_LEVEL0 ;
MPU_InitStruct . SubRegionDisable = 0x00 ;
MPU_InitStruct . DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE ;
HAL_MPU_ConfigRegion ( & MPU_InitStruct ) ;
MPU_InitStruct . Enable = MPU_REGION_ENABLE ;
MPU_InitStruct . Number = MPU_REGION_NUMBER5 ;
MPU_InitStruct . BaseAddress = SDRAM_START_ADDRESS ;
MPU_InitStruct . Size = SDRAM_MPU_REGION_SIZE ;
MPU_InitStruct . AccessPermission = MPU_REGION_FULL_ACCESS ;
MPU_InitStruct . IsBufferable = MPU_ACCESS_BUFFERABLE ;
MPU_InitStruct . IsCacheable = MPU_ACCESS_CACHEABLE ;
MPU_InitStruct . IsShareable = MPU_ACCESS_NOT_SHAREABLE ;
MPU_InitStruct . TypeExtField = MPU_TEX_LEVEL1 ;
MPU_InitStruct . SubRegionDisable = 0x00 ;
MPU_InitStruct . DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE ;
HAL_MPU_ConfigRegion ( & MPU_InitStruct ) ;