查看: 453|回复: 5
收起左侧

[DemoCode下载] N76E003 APROM 数据闪存作为EEPROM使用

[复制链接]

78

主题

1973

帖子

5928

积分

高级工程师

 楼主| 发表于 2017-7-12 16:45 | 显示全部楼层 |返回版面|阅读模式
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2016 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Nuvoton Technoledge Corp.
  8. //  Website: http://www.nuvoton.com
  9. //  E-Mail : MicroC-8bit@nuvoton.com
  10. //  Date   : Apr/21/2016
  11. //***********************************************************************************************************

  12. //***********************************************************************************************************
  13. //  File Function: N76E003 APROM program DATAFLASH as EEPROM way
  14. //***********************************************************************************************************
  15. #include <stdio.h>
  16. #include "N76E003.h"
  17. #include "Common.h"
  18. #include "Delay.h"
  19. #include "SFR_Macro.h"
  20. #include "Function_Define.h"

  21. bit BIT_TMP;

  22. //-------------------------------------------------------------------------
  23. UINT8 read_APROM_BYTE(UINT16 code *u16_addr)
  24. {
  25.         UINT8 rdata;
  26.         rdata = *u16_addr>>8;
  27.         return rdata;
  28. }
  29. //-------------------------------------------------------------------------


  30. /*****************************************************************************************************************
  31. write_DATAFLASH_BYTE :
  32. user can copy all this subroutine into project, then call this function in main.
  33. ******************************************************************************************************************/               
  34. void write_DATAFLASH_BYTE(UINT16 u16_addr,UINT8 u8_data)
  35. {
  36.         UINT8 looptmp=0,u8_addrl_r;
  37.         unsigned char code *cd_longaddr;
  38.         unsigned char xdata *xd_tmp;
  39.        
  40. //Check page start address
  41.         u8_addrl_r = u16_addr;
  42.         if (u8_addrl_r<0x80)
  43.         {
  44.                 u8_addrl_r = 0;
  45.         }
  46.         else
  47.         {
  48.                 u8_addrl_r = 0x80;
  49.         }
  50. //Save APROM data to XRAM
  51.         xd_tmp = 0x80;
  52.         cd_longaddr = (u16_addr&0xff00)+u8_addrl_r;       
  53.         while (xd_tmp !=0x100)
  54.         {
  55.                 *xd_tmp = *cd_longaddr;
  56.                 looptmp++;
  57.                 xd_tmp++;
  58.                 cd_longaddr++;
  59.         }
  60. // Modify customer data in XRAM
  61.         u8_addrl_r = u16_addr;
  62.         if (u8_addrl_r<0x80)
  63.         {
  64.                 xd_tmp = u8_addrl_r+0x80;
  65.         }
  66.         else
  67.         {
  68.                 xd_tmp = u8_addrl_r+0;
  69.         }
  70.         *xd_tmp = u8_data;
  71. //Erase APROM DATAFLASH page
  72.                 IAPAL = u16_addr;
  73.                 IAPAH = u16_addr>>8;
  74.                 IAPFD = 0xFF;
  75.           set_IAPEN;
  76.                 set_APUEN;
  77.     IAPCN = 0x22;                
  78.                 set_IAPGO;
  79. //Save changed RAM data to APROM DATAFLASH
  80.         u8_addrl_r = u16_addr;
  81.         if (u8_addrl_r<0x80)
  82.         {
  83.                 u8_addrl_r =0;
  84.         }
  85.         else
  86.         {
  87.                 u8_addrl_r = 0x80;
  88.         }
  89.                 xd_tmp = 0x80;
  90.           IAPAL = u8_addrl_r;
  91.     IAPAH = u16_addr>>8;
  92.                 set_IAPEN;
  93.                 set_APUEN;
  94.           IAPCN = 0x21;
  95.                 while (xd_tmp !=0xFF)
  96.                 {
  97.                         IAPFD = *xd_tmp;
  98.                         set_IAPGO;
  99.                         IAPAL++;
  100.                         xd_tmp++;
  101.                 }
  102.                 clr_APUEN;
  103.                 clr_IAPEN;
  104. }       
  105. /******************************************************************************************************************/               


  106. void main (void)
  107. {
  108.                 UINT8 datatemp;
  109. /* -------------------------------------------------------------------------*/
  110. /*  Dataflash use APROM area                                                                                                                         */
  111. /*        APROM 0x3800~0x38FF demo as dataflash                                                                                                     */
  112. /* Please use Memory window key in C:0x3800 to check earse result                                          */             
  113. /* -------------------------------------------------------------------------*/
  114.        
  115. //call write byte
  116.                 write_DATAFLASH_BYTE (0x3881,0x55);
  117.                 write_DATAFLASH_BYTE (0x3882,0x56);
  118.                 write_DATAFLASH_BYTE (0x3855,0xaa);
  119.                 write_DATAFLASH_BYTE (0x3856,0x66);
  120. //call read byte
  121.                 datatemp = read_APROM_BYTE(0x3882);
  122.     while(1);
  123. }
  124. //-----------------------------------------------------------------------------------------------------------
复制代码


87

主题

3670

帖子

1万

积分

资深工程师

发表于 2017-7-12 19:12 | 显示全部楼层 |返回版面
确实可以这样。

33

主题

901

帖子

2698

积分

初级工程师

发表于 2017-7-17 22:07 | 显示全部楼层 |返回版面
可以省一个EEPROM的钱。

62

主题

1667

帖子

4999

积分

中级工程师

发表于 2017-7-17 22:34 | 显示全部楼层 |返回版面
这个功能有助于实现高性价比的方案。
     

15

主题

66

帖子

198

积分

中级技术员

发表于 2017-7-18 09:02 | 显示全部楼层 |返回版面
不是很明白为什么要将数据先放在XRAM里呢,直接刷鞋Flash不行吗

73

主题

1707

帖子

5121

积分

高级工程师

发表于 2017-7-18 16:31 | 显示全部楼层 |返回版面
这玩的,都无法理解了。
您需要登录后才可以回帖 登录 | 注册 手机登录

本版积分规则

分享 快速回复 返回顶部 返回列表