forked from Elron_dev/elbear_arduino_bsp
v0.5.1
- в модулях Wire, SPI, Serial приведена в соответствие нумерация используемых экземпляров и периферии микроконтроллера. - в функции analogWrite() перед запуском ШИМ проверяется, не запущен ли уже указанный канал. - добавлена возможность переопределения функции main() в скетчах. - при старте программы задается граница кэшируемой области SPIFI в соответствии с размером текущего исполняемого кода. - исправление выявленных ошибок. Co-authored-by: KLASSENTS <klassen@elron.tech> Co-committed-by: KLASSENTS <klassen@elron.tech>
This commit is contained in:
1 parent
f1e091bf77
commit
eb9b1aa0c9
37 files changed
+248
-156
No files matched your search
@@ -3,6 +3,40 @@
|
||||
#include "mik32_hal_irq.h"
|
||||
#include "Arduino.h"
|
||||
|
||||
// --------------------- flash cache limit --------------------- //
|
||||
#include "mcu32_memory_map.h"
|
||||
#include "mik32_hal_spifi_w25.h"
|
||||
|
||||
// define board flash size
|
||||
#if defined(ARDUINO_START_MIK32_V1)
|
||||
#define FLASH_SIZE 0x00400000 // 4 Mb
|
||||
#elif defined(ARDUINO_ACE_UNO_16MB)
|
||||
#define FLASH_SIZE 0x01000000 // 16 Mb
|
||||
#elif defined(ARDUINO_ACE_UNO_32MB)
|
||||
#define FLASH_SIZE 0x02000000 // 32 Mb
|
||||
#else
|
||||
#define FLASH_SIZE 0x00800000 // 8 Mb
|
||||
#endif
|
||||
// define margin from flash end
|
||||
#define FLASH_END_OFFSET 0x1000
|
||||
|
||||
// values from ld script
|
||||
extern uint8_t __RODATA__[];
|
||||
|
||||
// RAM-function for updating flash cache limit by app size to improve performance
|
||||
__attribute__((section(".ram_text"))) void updateCacheLimit(void)
|
||||
{
|
||||
uint32_t new_limit = (uintptr_t)__RODATA__ - SPIFI_BASE_ADDRESS;
|
||||
// limit cache size by flash size with margin
|
||||
if (new_limit > (FLASH_SIZE - FLASH_END_OFFSET))
|
||||
new_limit = FLASH_SIZE - FLASH_END_OFFSET;
|
||||
|
||||
uint32_t MCMDbackup = SPIFI_CONFIG->MCMD; // save current value from MCMD
|
||||
SPIFI_CONFIG->STAT |= SPIFI_CONFIG_STAT_RESET_M; // reset MCMD mode for writing new CLIMIT
|
||||
SPIFI_CONFIG->CLIMIT = new_limit; // set new CLIMIT
|
||||
SPIFI_CONFIG->MCMD = MCMDbackup; // restore MCMD value
|
||||
}
|
||||
|
||||
// --------------------- init --------------------- //
|
||||
// called from crt0.S before constructors initialization
|
||||
extern "C" void SystemInit(void)
|
||||
@@ -20,6 +54,8 @@ extern "C" void SystemInit(void)
|
||||
|
||||
// for delays
|
||||
SysTick_Init();
|
||||
// update flash cache limit by app size
|
||||
updateCacheLimit();
|
||||
}
|
||||
|
||||
// called after setup()
|
||||
|
||||
Reference in new issue
Block a user