./workspace/TS100 -> ./source/
This commit is contained in:
47
source/Core/BSP/Pine64/flash.c
Normal file
47
source/Core/BSP/Pine64/flash.c
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* flash.c
|
||||
*
|
||||
* Created on: 29 May 2020
|
||||
* Author: Ralim
|
||||
*/
|
||||
|
||||
#include "BSP.h"
|
||||
#include "BSP_Flash.h"
|
||||
#include "gd32vf103_libopt.h"
|
||||
#include "string.h"
|
||||
#define FMC_PAGE_SIZE ((uint16_t)0x400U)
|
||||
//static uint16_t settings_page[FMC_PAGE_SIZE] __attribute__ ((section (".settings_page")));
|
||||
//Linker script doesnt want to play, so for now its hard coded
|
||||
#define SETTINGS_START_PAGE (0x08000000 +(127*1024))
|
||||
uint8_t flash_save_buffer(const uint8_t *buffer, const uint16_t length) {
|
||||
|
||||
/* unlock the flash program/erase controller */
|
||||
fmc_unlock();
|
||||
|
||||
/* clear all pending flags */
|
||||
fmc_flag_clear(FMC_FLAG_END);
|
||||
fmc_flag_clear(FMC_FLAG_WPERR);
|
||||
fmc_flag_clear(FMC_FLAG_PGERR);
|
||||
resetWatchdog();
|
||||
fmc_page_erase((uint32_t) SETTINGS_START_PAGE);
|
||||
resetWatchdog();
|
||||
uint16_t *data = (uint16_t*) buffer;
|
||||
for (uint8_t i = 0; i < (length / 2); i++) {
|
||||
fmc_halfword_program((uint32_t) SETTINGS_START_PAGE + (i * 2), data[i]);
|
||||
fmc_flag_clear(FMC_FLAG_END);
|
||||
fmc_flag_clear(FMC_FLAG_WPERR);
|
||||
fmc_flag_clear(FMC_FLAG_PGERR);
|
||||
resetWatchdog();
|
||||
}
|
||||
fmc_lock();
|
||||
return 1;
|
||||
}
|
||||
|
||||
void flash_read_buffer(uint8_t *buffer, const uint16_t length) {
|
||||
uint32_t* b = (uint32_t*) buffer;
|
||||
uint32_t* b2 = (uint32_t*) SETTINGS_START_PAGE;
|
||||
for (int i = 0; i < length / 4; i++) {
|
||||
b[i] = b2[i];
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user