#include "flash.h" #include "gd32e230_fmc.h" static void flash_erase_page(uint32_t addr) { fmc_unlock(); fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR); fmc_page_erase(addr); fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR); fmc_lock(); } void flash_erase_programe(uint32_t base_addr, uint32_t count,uint32_t page_size) { uint32_t temp_addr = base_addr; for(int i = 0; i < count; i++) { flash_erase_page(temp_addr); temp_addr += page_size; } } uint32_t flash_write_programe(uint32_t base_addr,void *source,uint32_t lenth) { uint32_t temp_addr = base_addr; fmc_unlock(); uint32_t *data = (uint32_t *)(source); uint32_t word_lenth = ((lenth % 4) == 0 ? (lenth/4):((lenth/4)+1)); for(uint32_t i = 0; i < word_lenth;i++) { fmc_word_program(temp_addr,*data++); fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR); temp_addr += 4; } fmc_lock(); return temp_addr; }