mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-23 16:25:31 +03:00
AT32F43x: make sure the SRAM configuration is valid (#13031)
This commit is contained in:
parent
a5791814c0
commit
632a13b821
3 changed files with 73 additions and 2 deletions
|
@ -23,13 +23,15 @@
|
||||||
MEM : 0x2000 0000 -- 0x2007 FFFF
|
MEM : 0x2000 0000 -- 0x2007 FFFF
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
_SRAM_SIZE = 192;
|
||||||
|
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 16K
|
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 16K
|
||||||
FLASH_CONFIG (r) : ORIGIN = 0x08004000, LENGTH = 16K
|
FLASH_CONFIG (r) : ORIGIN = 0x08004000, LENGTH = 16K
|
||||||
FLASH1 (rx) : ORIGIN = 0x08008000, LENGTH = 992K
|
FLASH1 (rx) : ORIGIN = 0x08008000, LENGTH = 992K
|
||||||
SYSTEM_MEMORY (rx) : ORIGIN = 0x1FFF0000, LENGTH = 16K
|
SYSTEM_MEMORY (rx) : ORIGIN = 0x1FFF0000, LENGTH = 16K
|
||||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 192K
|
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = _SRAM_SIZE * 1024
|
||||||
MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K /* external ram */
|
MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K /* external ram */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,13 +23,15 @@
|
||||||
MEM : 0x2000 0000 -- 0x2007 FFFF
|
MEM : 0x2000 0000 -- 0x2007 FFFF
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
_SRAM_SIZE = 192;
|
||||||
|
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 16K
|
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 16K
|
||||||
FLASH_CONFIG (r) : ORIGIN = 0x08004000, LENGTH = 16K
|
FLASH_CONFIG (r) : ORIGIN = 0x08004000, LENGTH = 16K
|
||||||
FLASH1 (rx) : ORIGIN = 0x08008000, LENGTH = 4000K
|
FLASH1 (rx) : ORIGIN = 0x08008000, LENGTH = 4000K
|
||||||
SYSTEM_MEMORY (rx) : ORIGIN = 0x1FFF0000, LENGTH = 16K
|
SYSTEM_MEMORY (rx) : ORIGIN = 0x1FFF0000, LENGTH = 16K
|
||||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 192K
|
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = _SRAM_SIZE * 1024
|
||||||
MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K /* external ram */
|
MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K /* external ram */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,71 @@
|
||||||
#include "drivers/persistent.h"
|
#include "drivers/persistent.h"
|
||||||
#include "at32f435_437_clock.h"
|
#include "at32f435_437_clock.h"
|
||||||
|
|
||||||
|
// See RM_AT32F435_437_EN_V2.05.pdf reference manual table 5-6 for more info.
|
||||||
|
#if 256 < TARGET_FLASH_SIZE
|
||||||
|
#define USD_EOPB0_SRAM_CONFIG_MASK 0x7
|
||||||
|
#else
|
||||||
|
#define USD_EOPB0_SRAM_CONFIG_MASK 0x3
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static flash_usd_eopb0_type get_sram_config(void)
|
||||||
|
{
|
||||||
|
extern uint32_t _SRAM_SIZE; // Defined in linker file
|
||||||
|
switch ((uint32_t)&_SRAM_SIZE) {
|
||||||
|
#if 256 == TARGET_FLASH_SIZE
|
||||||
|
case 448:
|
||||||
|
return FLASH_EOPB0_SRAM_448K;
|
||||||
|
case 512:
|
||||||
|
return FLASH_EOPB0_SRAM_512K;
|
||||||
|
case 384:
|
||||||
|
default:
|
||||||
|
return FLASH_EOPB0_SRAM_384K;
|
||||||
|
#elif 448 == TARGET_FLASH_SIZE
|
||||||
|
case 256:
|
||||||
|
return FLASH_EOPB0_SRAM_256K;
|
||||||
|
case 320:
|
||||||
|
return FLASH_EOPB0_SRAM_320K;
|
||||||
|
case 384:
|
||||||
|
return FLASH_EOPB0_SRAM_384K;
|
||||||
|
case 448:
|
||||||
|
return FLASH_EOPB0_SRAM_448K;
|
||||||
|
case 512:
|
||||||
|
return FLASH_EOPB0_SRAM_512K;
|
||||||
|
case 192:
|
||||||
|
default:
|
||||||
|
return FLASH_EOPB0_SRAM_192K;
|
||||||
|
#elif 1024 <= TARGET_FLASH_SIZE
|
||||||
|
case 128:
|
||||||
|
return FLASH_EOPB0_SRAM_128K;
|
||||||
|
case 256:
|
||||||
|
return FLASH_EOPB0_SRAM_256K;
|
||||||
|
case 320:
|
||||||
|
return FLASH_EOPB0_SRAM_320K;
|
||||||
|
case 384:
|
||||||
|
return FLASH_EOPB0_SRAM_384K;
|
||||||
|
case 448:
|
||||||
|
return FLASH_EOPB0_SRAM_448K;
|
||||||
|
case 512:
|
||||||
|
return FLASH_EOPB0_SRAM_512K;
|
||||||
|
case 192:
|
||||||
|
default:
|
||||||
|
return FLASH_EOPB0_SRAM_192K;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void init_sram_config(void)
|
||||||
|
{
|
||||||
|
// Make sure the SRAM config is correct
|
||||||
|
const flash_usd_eopb0_type sram_cfg = get_sram_config();
|
||||||
|
if (((USD->eopb0) & USD_EOPB0_SRAM_CONFIG_MASK) != sram_cfg) {
|
||||||
|
flash_unlock();
|
||||||
|
flash_user_system_data_erase();
|
||||||
|
flash_eopb0_config(sram_cfg);
|
||||||
|
systemReset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void systemReset(void)
|
void systemReset(void)
|
||||||
{
|
{
|
||||||
__disable_irq();
|
__disable_irq();
|
||||||
|
@ -96,6 +161,8 @@ bool isMPUSoftReset(void)
|
||||||
|
|
||||||
void systemInit(void)
|
void systemInit(void)
|
||||||
{
|
{
|
||||||
|
init_sram_config();
|
||||||
|
|
||||||
persistentObjectInit();
|
persistentObjectInit();
|
||||||
|
|
||||||
checkForBootLoaderRequest();
|
checkForBootLoaderRequest();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue