| 123456789101112131415161718192021222324252627282930313233343536373839 |
- #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;
- }
|