4b3bf339f63545f0eae2c2cfb3d5e1bb1bfaaaf7.svn-base 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "Flash.h"
  2. volatile unsigned char xdata page_buffer[128];
  3. UINT8 Read_APROM_BYTE ( UINT16 code *u16_addr )
  4. {
  5. UINT8 rdata;
  6. rdata = *u16_addr >> 8;
  7. return rdata;
  8. }
  9. /*****************************************************************************************************************
  10. write_DATAFLASH_BYTE :
  11. user can copy all this subroutine into project, then call this function in main.
  12. ******************************************************************************************************************/
  13. void Write_DATAFLASH_BYTE ( unsigned int u16EPAddr, unsigned char u8EPData )
  14. {
  15. unsigned char looptmp = 0;
  16. unsigned int u16_addrl_r;
  17. unsigned int RAMtmp;
  18. //Check page start address
  19. u16_addrl_r = ( u16EPAddr / 128 ) * 128;
  20. //Save APROM data to XRAM0
  21. for ( looptmp = 0; looptmp < 0x80; looptmp++ )
  22. {
  23. RAMtmp = Read_APROM_BYTE ( ( unsigned int code * ) ( u16_addrl_r + looptmp ) );
  24. page_buffer[looptmp] = RAMtmp;
  25. }
  26. // Modify customer data in XRAM
  27. page_buffer[u16EPAddr & 0x7f] = u8EPData;
  28. //Erase APROM DATAFLASH page
  29. IAPAL = u16_addrl_r & 0xff;
  30. IAPAH = ( u16_addrl_r >> 8 ) & 0xff;
  31. IAPFD = 0xFF;
  32. set_IAPEN;
  33. set_APUEN;
  34. IAPCN = 0x22;
  35. set_IAPGO;
  36. //Save changed RAM data to APROM DATAFLASH
  37. set_IAPEN;
  38. set_APUEN;
  39. IAPCN = 0x21;
  40. for ( looptmp = 0; looptmp < 0x80; looptmp++ )
  41. {
  42. IAPAL = ( u16_addrl_r & 0xff ) + looptmp;
  43. IAPAH = ( u16_addrl_r >> 8 ) & 0xff;
  44. IAPFD = page_buffer[looptmp];
  45. set_IAPGO;
  46. }
  47. clr_APUEN;
  48. clr_IAPEN;
  49. }