flash_programe.c 970 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include "flash.h"
  2. #include "gd32e230_fmc.h"
  3. static void flash_erase_page(uint32_t addr)
  4. {
  5. fmc_unlock();
  6. fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR);
  7. fmc_page_erase(addr);
  8. fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR);
  9. fmc_lock();
  10. }
  11. void flash_erase_programe(uint32_t base_addr, uint32_t count,uint32_t page_size)
  12. {
  13. uint32_t temp_addr = base_addr;
  14. for(int i = 0; i < count; i++)
  15. {
  16. flash_erase_page(temp_addr);
  17. temp_addr += page_size;
  18. }
  19. }
  20. uint32_t flash_write_programe(uint32_t base_addr,void *source,uint32_t lenth)
  21. {
  22. uint32_t temp_addr = base_addr;
  23. fmc_unlock();
  24. uint32_t *data = (uint32_t *)(source);
  25. uint32_t word_lenth = ((lenth % 4) == 0 ? (lenth/4):((lenth/4)+1));
  26. for(uint32_t i = 0; i < word_lenth;i++)
  27. {
  28. fmc_word_program(temp_addr,*data++);
  29. fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR);
  30. temp_addr += 4;
  31. }
  32. fmc_lock();
  33. return temp_addr;
  34. }