You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

73 lines
1.3 KiB

  1. #include <string.h>
  2. #define _FLASH_PRIVATE_
  3. #include <cyg/io/flash.h>
  4. int myprintf(char *format, ...)
  5. {
  6. return 0;
  7. }
  8. extern char _start_bss_clear;
  9. extern char __bss_end__;
  10. int init()
  11. {
  12. // set up runtime environment
  13. char *t;
  14. for (t=&_start_bss_clear; t<&__bss_end__; t++)
  15. {
  16. *t=0;
  17. }
  18. return flash_init((_printf *)&myprintf);
  19. }
  20. int checkFlash(void *addr, int len)
  21. {
  22. // Return error for illegal addresses
  23. if ((addr<flash_info.start)||(addr>flash_info.end))
  24. return FLASH_ERR_INVALID;
  25. if ((((cyg_uint8 *)addr)+len)>(cyg_uint8 *)flash_info.end)
  26. return FLASH_ERR_INVALID;
  27. return FLASH_ERR_OK;
  28. }
  29. int erase(void *address, int len)
  30. {
  31. int retval;
  32. void *failAddress;
  33. retval=checkFlash(address, len);
  34. if (retval!=0)
  35. return retval;
  36. retval=init();
  37. if (retval!=0)
  38. return retval;
  39. return flash_erase(address, len, &failAddress);
  40. }
  41. extern char _end;
  42. // Data follows immediately after program, long word aligned.
  43. int program(void *buffer, void *address, int len)
  44. {
  45. int retval;
  46. void *failAddress;
  47. retval=checkFlash(address, len);
  48. if (retval!=0)
  49. return retval;
  50. retval=init();
  51. if (retval!=0)
  52. return retval;
  53. //int flash_program(void *_addr, void *_data, int len, void **err_addr)
  54. return flash_program(address, buffer, len, &failAddress);
  55. }