[demo程序] NV32F101用FLASH模拟EEPROM,实现字节的编程程序示例

[复制链接]
 楼主| Bruing 发表于 2018-8-28 17:23 | 显示全部楼层 |阅读模式
  1. /**********************************************************************
  2. *
  3. * 实验名称:FLASH操作
  4. * 实验平台:NV32开发板
  5. * 板载芯片:NV32F101FL64E
  6. * 实验效果:使用FLASH模拟EEPROM,实现字节的编程
  7. *
  8. ************************************************************************/

  9. #include "common.h"
  10. #include "rtc.h"
  11. #include "flash.h"
  12. #include "sysinit.h"
  13. #include "eeprom.h"

  14. int main (void);

  15. /********************************************************************/
  16. int main (void)
  17. {
  18.                 char ch;  
  19.     uint32_t i;
  20.     uint8_t  u8DataBuff[512];

  21.                 sysinit();
  22.           printf("\nRunning the Flash_demo project.\n");
  23.     LED0_Init();  
  24.     LED2_Init();
  25.     Flash_Init();

  26.                 /*对FLASH第60个扇区进行擦-读-写 */
  27.        
  28.     /* 擦除第60个扇区*/
  29.     Flash_EraseSector(60*FLASH_SECTOR_SIZE);
  30.    
  31.     for(i=0;i<512;i++)
  32.     {
  33.         u8DataBuff[i] = (uint8_t)i;
  34.     }
  35.    
  36.     /*向擦除的扇区写入数据*/
  37.     Flash_Program(60*FLASH_SECTOR_SIZE,&u8DataBuff[0],512 );
  38.    
  39.     for( i=0;i<512/16;i++ )
  40.     {
  41.         for(ch =0;ch<16;ch++)
  42.         {
  43.            printf("0x%x,",*((uint8_t *)(i*16+ch+60*FLASH_SECTOR_SIZE)));
  44.         }
  45.         printf("\n");
  46.     }

  47. /*********************************************************************************
  48. *
  49. *        EEPROM 使用范例
  50. *        EEPROM 第一次使用前,可以先erase,这样可以提高写的效率
  51. *        一次只能写一个双字,如果写byte,可以先处理一下然后写
  52. *        小于10byte,单独调用EEPROM_Write 效率可能更高,EERPOM_Writeup4byte建议在写比较长数据时使用
  53. *
  54. **********************************************************************************/
  55.   EEPROM_Erase(0x00);
  56.   EEPROM_Erase(0x200);   //建议在最开始进行erase 初始化,提高效率
  57.   
  58.   for(i=0;i<256;i++)
  59.         {
  60.                 EEPROM_Write(4*i,1024-4*i);
  61.   }
  62.    
  63.   //任意位置再写一个
  64.         EEPROM_Write(24,0x55aa);
  65.         EEPROM_Write(68,0xaa55);
  66.         EEPROM_Write(128,0x3fec);
  67.   EEPROM_Write(156,0xccbb);
  68.         EEPROM_Write(256,0xbbcc);
  69.         EEPROM_Write(264,0xccdd);
  70.         EEPROM_Write(300,0x3fff);
  71.   EEPROM_Write(512,0x5f5f);
  72.   EEPROM_Write(900,0x9f9f);
  73.    
  74.         for(i=0;i<256;i++)
  75.         {
  76.                 printf("adr:%d =0x%x \n",4*i,EEPROM_Read(4*i));
  77.         }
  78. //批量写
  79.   printf("/***************************批量测试**************************/ \n");
  80.   
  81.   //跨界的写,1-2个sector的写
  82.         EERPOM_Writeup4byte(340,u8DataBuff,512);
  83.         //byte写,byte读取

  84.   printf("/***************************byte写测试**************************/ \n");
  85.   EEPROM_WriteByte(132,0x13);
  86.   printf("adr :132 =0x%x \n",EEPROM_Read(132));
  87.   EEPROM_WriteByte(132,0x14);
  88.   printf("adr :132 =0x%x \n",EEPROM_Read(132));
  89.   EEPROM_WriteByte(132,0x12);
  90.   printf("adr :132 =0x%x \n",EEPROM_ReadByte(132));
  91.   EEPROM_WriteByte(132,0x15);
  92.   printf("adr :132 =0x%x \n",EEPROM_ReadByte(132));
  93.    
  94.   while(1)
  95.         {
  96.         }
  97. }



您需要登录后才可以回帖 登录 | 注册

本版积分规则

71

主题

308

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

71

主题

308

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部