[技术问答] N76E003 EEPROM官方程序不能用

[复制链接]
605|8
 楼主 | 2018-7-9 11:19 | 显示全部楼层 |阅读模式
N76E003 EEPROM官方程序不能用:单独运行例程可以对0x3881开始的单元写入,正确,加入自己其它模块后读出全是0xff。程序总长8.4KB。其它模块很短时却正常的!请教各位问题在哪?(我已经做过一个项目是6.9995KB也是没问题,EEPROM程序相同)
| 2018-7-9 14:27 | 显示全部楼层
IAP_BYATE.C修改一个阵列,当作修改的buffer.

  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 "N76E003.h"
  16. #include "Common.h"
  17. #include "Delay.h"
  18. #include "SFR_Macro.h"
  19. #include "Function_define.h"

  20. #define ADDR_BASE 0x4700

  21. #define FLASH_L_LOW                        ADDR_BASE+1
  22. #define FLASH_L_HIGH                ADDR_BASE+2
  23. #define FLASH_H_LOW                        ADDR_BASE+3
  24. #define FLASH_H_HIGH                ADDR_BASE+4

  25. volatile unsigned char xdata page_buffer[128];
  26. UINT8 read_APROM_BYTE(UINT16 code *u16_addr);
  27. /*****************************************************************************************************************
  28. write_DATAFLASH_BYTE :
  29. user can copy all this subroutine into project, then call this function in main.
  30. ******************************************************************************************************************/               
  31. void write_DATAFLASH_BYTE(UINT16 u16_addr,UINT8 u8_data)
  32. {
  33.         UINT8 looptmp=0;
  34.         UINT16 u16_addrl_r;

  35.         UINT16 tmp=0;
  36. //Check page start address
  37.         u16_addrl_r=(u16_addr/128)*128;
  38. //Save APROM data to XRAM0
  39.         for(looptmp=0;looptmp<0x80;looptmp++)
  40.         {
  41.         tmp=read_APROM_BYTE(u16_addrl_r+looptmp);
  42.         page_buffer[looptmp]=tmp;
  43.         }
  44. // Modify customer data in XRAM
  45.         page_buffer[u16_addr&0x7f] = u8_data;
  46.        
  47. //Erase APROM DATAFLASH page
  48.                 IAPAL = u16_addrl_r&0xff;
  49.                 IAPAH = (u16_addrl_r>>8)&0xff;
  50.                 IAPFD = 0xFF;
  51.           set_IAPEN;
  52.                 set_APUEN;
  53.     IAPCN = 0x22;                
  54.                 set_IAPGO;
  55.                
  56. //Save changed RAM data to APROM DATAFLASH
  57.           
  58.                 set_IAPEN;
  59.                 set_APUEN;
  60.           IAPCN = 0x21;
  61.                 for(looptmp=0;looptmp<0x80;looptmp++)
  62.                 {
  63.                         IAPAL = (u16_addrl_r&0xff)+looptmp;
  64.       IAPAH = (u16_addrl_r>>8)&0xff;
  65.                         IAPFD = page_buffer[looptmp];
  66.                         set_IAPGO;                       
  67.                 }
  68.                 clr_APUEN;
  69.                 clr_IAPEN;
  70. }       
  71.        
  72. //-------------------------------------------------------------------------
  73. UINT8 read_APROM_BYTE(UINT16 code *u16_addr)
  74. {
  75.         UINT8 rdata;
  76.         rdata = *u16_addr>>8;
  77.         return rdata;
  78. }

  79. /******************************************************************************************************************/       


  80. void main (void)
  81. {
  82.                 UINT8 datatemp;
  83.                 UINT16 system16highsite;
  84. /* -------------------------------------------------------------------------*/
  85. /*  Dataflash use APROM area, please ALWAYS care the address of you code    */
  86. /*        APROM 0x3800~0x38FF demo as dataflash                                                                                                     */
  87. /*         Please use Memory window key in C:0x3800 to check earse result                                        */             
  88. /* -------------------------------------------------------------------------*/
  89.                 InitialUART0_Timer1(115200);
  90. //call write byte
  91. write_DATAFLASH_BYTE (0x3802,0x55);       
  92.                 write_DATAFLASH_BYTE (0x3882,0x34);
  93.                 write_DATAFLASH_BYTE (FLASH_L_LOW,0x55);
  94.                 write_DATAFLASH_BYTE (FLASH_L_HIGH,0x56);
  95.                 write_DATAFLASH_BYTE (FLASH_H_LOW,0xaa);
  96.                 write_DATAFLASH_BYTE (FLASH_H_HIGH,0x66);
  97. //call read byte
  98.                 datatemp = read_APROM_BYTE(0x3802);
  99.                 system16highsite = ((read_APROM_BYTE(FLASH_H_HIGH)<<8)+read_APROM_BYTE(FLASH_H_LOW));

  100.     while(1)
  101.                 {
  102. //                                printf ("\n data temp = 0x%bx", datatemp);
  103.                 }
  104. }
  105. //-----------------------------------------------------------------------------------------------------------
复制代码
| 2018-7-9 15:38 | 显示全部楼层
那就是那儿没设置对,单独搞和加入其它程序,理论上没有冲突的。
| 2018-7-9 23:45 | 显示全部楼层
地址没有设置对?》
| 2018-7-10 11:55 | 显示全部楼层
官方例程有些存在问题的,可以问他们技术人员,一般会有补充。
| 2018-7-12 20:35 | 显示全部楼层
解决了没,是不是地址官方没有给对,看英文版的手册。
| 2018-7-13 19:11 | 显示全部楼层
今天看到个贴,介绍这个的。
| 2018-7-15 16:24 | 显示全部楼层
官方的例子可以跑啊,没毛病。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

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