Flash.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /************************************************************************
  2. * ---- 居加居 ----
  3. * 文件名: Flash.c
  4. * 编写人员: Kinve JQ
  5. * 说明:
  6. * 版本: V0.1
  7. * 编写日期: 2018-09-30
  8. * 程序维护:
  9. * 维护记录:
  10. * 2018-09-30.Kinve:1.创建文件
  11. * 免责声明:
  12. * (c) Author Kinve JQ. All rights reserved.
  13. **************************************************************************/
  14. #include "Flash.h"
  15. volatile unsigned char xdata page_buffer[128];
  16. UINT8 Read_APROM_BYTE ( UINT16 code *u16_addr )
  17. {
  18. UINT8 rdata;
  19. rdata = *u16_addr >> 8;
  20. return rdata;
  21. }
  22. /*****************************************************************************************************************
  23. write_DATAFLASH_BYTE :
  24. user can copy all this subroutine into project, then call this function in main.
  25. ******************************************************************************************************************/
  26. void Write_DATAFLASH_BYTE ( unsigned int u16EPAddr, unsigned char u8EPData )
  27. {
  28. unsigned char looptmp = 0;
  29. unsigned int u16_addrl_r;
  30. unsigned int RAMtmp;
  31. //Check page start address
  32. u16_addrl_r = ( u16EPAddr / 128 ) * 128;
  33. //Save APROM data to XRAM0
  34. for ( looptmp = 0; looptmp < 0x80; looptmp++ )
  35. {
  36. RAMtmp = Read_APROM_BYTE ( ( unsigned int code * ) ( u16_addrl_r + looptmp ) );
  37. page_buffer[looptmp] = RAMtmp;
  38. }
  39. // Modify customer data in XRAM
  40. page_buffer[u16EPAddr & 0x7f] = u8EPData;
  41. //Erase APROM DATAFLASH page
  42. IAPAL = u16_addrl_r & 0xff;
  43. IAPAH = ( u16_addrl_r >> 8 ) & 0xff;
  44. IAPFD = 0xFF;
  45. set_IAPEN;
  46. set_APUEN;
  47. IAPCN = 0x22;
  48. set_IAPGO;
  49. //Save changed RAM data to APROM DATAFLASH
  50. set_IAPEN;
  51. set_APUEN;
  52. IAPCN = 0x21;
  53. for ( looptmp = 0; looptmp < 0x80; looptmp++ )
  54. {
  55. IAPAL = ( u16_addrl_r & 0xff ) + looptmp;
  56. IAPAH = ( u16_addrl_r >> 8 ) & 0xff;
  57. IAPFD = page_buffer[looptmp];
  58. set_IAPGO;
  59. }
  60. clr_APUEN;
  61. clr_IAPEN;
  62. }
  63. /*************** (C) COPYRIGHT Kinve JQ *******END OF FILE **************/