Настройка размера кеша у микросхемы flash-памяти по размеру прошивки #24

Merged
klassents merged 4 commits from v0.5.1_flashCache into v0.5.1 2025-05-30 07:49:20 +03:00
3 changed files with 27 additions and 15 deletions
Showing only changes of commit dba235e839 - Show all commits

View File

@ -3,6 +3,25 @@
#include "mik32_hal_irq.h"
#include "Arduino.h"
// --------------------- change flash cache limit --------------------- //
#include "mcu32_memory_map.h"
#include "mik32_hal_spifi_w25.h"
#define CLIMIT_NEW (2 * 256 * 1024) // Новый предел кэширования
// Объявляем, что эта функция исполняется из RAM
__attribute__((section(".ram_text"))) void updateCacheLimit(void)
{
uint32_t MCMDbackup = SPIFI_CONFIG->MCMD; // Прочитать текущие настройки из регистра MCMD
SPIFI_CONFIG->STAT |= SPIFI_CONFIG_STAT_RESET_M; // Сброс режима MCMD: установить бит RESET
SPIFI_CONFIG->CLIMIT = CLIMIT_NEW; // Установить новое значение CLIMIT
SPIFI_CONFIG->MCMD = MCMDbackup; // Вернуть обратно значение в регистр MCMD
}
uint32_t getCLimit(void)
{
return SPIFI_CONFIG->CLIMIT;
}
// --------------------- init --------------------- //
// called from crt0.S before constructors initialization
extern "C" void SystemInit(void)

View File

@ -8,4 +8,9 @@ extern volatile bool use_error_messages;
// function for init called after setup()
void post_init(void);
void updateCacheLimit(void);
#include "stdint.h"
uint32_t getCLimit(void);
#endif /* _BOARD_H_ */

View File

@ -7,27 +7,15 @@
void initVariant() __attribute__((weak));
void initVariant() { }
#include "mcu32_memory_map.h"
#include "mik32_hal_spifi_w25.h"
#define CLIMIT_NEW (2 * 256 * 1024) // Новый предел кэширования
// Объявляем, что эта функция исполняется из RAM
__attribute__((section(".ram_text"))) void updateCacheLimit(void)
{
uint32_t MCMDbackup = SPIFI_CONFIG->MCMD; // Прочитать текущие настройки из регистра MCMD
SPIFI_CONFIG->STAT |= SPIFI_CONFIG_STAT_RESET_M; // Сброс режима MCMD: установить бит RESET
SPIFI_CONFIG->CLIMIT = CLIMIT_NEW; // Установить новое значение CLIMIT
SPIFI_CONFIG->MCMD = MCMDbackup; // Вернуть обратно значение в регистр MCMD
}
#include "xprintf.h"
extern "C" int main(void) __attribute__((weak));
int main()
{
Serial.begin(9600);
xprintf("old_climit = 0x%08lX\n", SPIFI_CONFIG->CLIMIT);
xprintf("old_climit = 0x%08lX\n", getCLimit());
updateCacheLimit();
xprintf("new_climit = 0x%08lX\n", SPIFI_CONFIG->CLIMIT);
xprintf("new_climit = 0x%08lX\n", getCLimit());
initVariant(); // for freeRTOS
setup();