
/************************ (C) COPYRIGHT 2015 FT *******************************
* File Name          : 
* Author             : Application Team  Tom.wang 
* Version            : V2.0.0
* Date               : 06/15/2015
* Description        : 


A、不需要频繁存储数据 可以使用简单的擦除、写入、读取函数
flash操作分为以下三步
1、 扇区擦除。
uint8 Flash_Sector_Erase(uint8 xdata *FlashAddress)  由fu6812_19_System.lib提供
例如: Flash_Sector_Erase(0x3F00);
2、 单字节写入
uint8 Flash_Sector_Write(uint8 xdata *FlashAddress, uint8 FlashData)  由fu6812_19_System.lib提供
例如: Flash_Sector_Write(0x3F00,0X55);
3、 读取flash
tevalue = *(uint8 code *)Rom.PageAddress;  
例如: tevalue = *(uint8 code *)(0x3F00);  
      tevalue 的值为0x55;

B、本文件的函数用于存储1个字节数据，用于频繁存储。
实现方法为：使用0X3E00 扇区和 0X3F00扇区存储一个字节，如 上次存储在0x3E01 区间，本次存储在0X3E02区间 一次类推。
本扇区存储满后 向0X3F00扇区存储。同时擦除0X上个扇区数据即0x3E00扇区

********************************************************************************
/*******************************************************************************
* All Rights Reserved
*******************************************************************************/

/* Includes ------------------------------------------------------------------*/
#include <FU6812_19.h>
#include <sys_conf.h>
#include <fu681x_adc.h>
#include <fu681x_flash.h>

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define STARTPAGEROMADDRESS 0x3E00 
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
ROM_TypeDef xdata  Rom;

/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
u8 Flash_GetAddress(void);
void Flash_ErasePageRom(void);
void Flash_KeyWriteValue( u8 value);

/*-------------------------------------------------------------------------------------------------
  Function Name : void Flash_GetAddress(void)
  Description   : 读取Flash当前地址中的值 ,当前扇区首地址默认写入0x7F数据  
                  每次上电用于判断当前使用的扇区
  Input         : null
  Output        : 读取当前值
-------------------------------------------------------------------------------------------------*/
u8 Flash_GetAddress(void)//
{
//  u8 i;
//  u8 tevalue;        //临时变量
//  u8 revalue;        //返回值

//  Rom.PageAddress = STARTPAGEROMADDRESS;
//  
//  tevalue = *(uint8 code *)Rom.PageAddress;
//  
//  while(tevalue != 0x7F)
//  {
//    Rom.PageAddress = Rom.PageAddress + 0x80; 
//    tevalue = *(uint8 code *)Rom.PageAddress;
//    
//    if(Rom.PageAddress > 0x3F00)
//    {
//      Rom.PageAddress = STARTPAGEROMADDRESS;        
//      revalue = 1;
//      Rom.OffsetAddressCur = 0;
//      Rom.OffsetAddressTar = Rom.OffsetAddressCur + 1;
//      Flash_Sector_Write(Rom.PageAddress,0X7F); 
//      tevalue = 0x7F;
//    }      
//  }

//  for(i = 0; i < 128;i++)
//  {
//    tevalue = *(uint8 code *)(Rom.PageAddress + i);
//    if(tevalue > 0)
//    {
//      Rom.OffsetAddressCur = i;
//      Rom.OffsetAddressTar = Rom.OffsetAddressCur + 1;
//      revalue = tevalue;
//    }
//  }

//  return revalue;
//}

///*-------------------------------------------------------------------------------------------------
//  Function Name : void Flash_ErasePageRom(void)
//  Description   : 擦除上一页内容
//  Input         : null
//  Output        : null
//-------------------------------------------------------------------------------------------------*/
//void Flash_ErasePageRom(void)
//{
//  if(Rom.OffsetAddressCur >= 127)
//  { 
//    Rom.OffsetAddressCur = 0;
//    Rom.OffsetAddressTar = Rom.OffsetAddressCur + 1;

//    Flash_Sector_Erase(Rom.PageAddress);                   //擦除本页

//    if(Rom.PageAddress < 0x3F00)    
//    {
//      Rom.PageAddress = Rom.PageAddress + 0x80;
//    }
//    else 
//    {
//      Rom.PageAddress = STARTPAGEROMADDRESS;
//    }
//    
//    Flash_Sector_Write(Rom.PageAddress + Rom.OffsetAddressCur, 0x7F);    //首地址写入
//  }
}
/*-------------------------------------------------------------------------------------------------
  Function Name : void Flash_KeyWriteValue(void)
  Description   : 按键存储函数，
  1、检测存储值是否和写入值相等，如相等不再重复写入   
  2、同时检测是否写入成功，如失败再次写入。 重复5次   （暂时没有发现首次写入不成功现象）
  Input         : null
  Output        : null
-------------------------------------------------------------------------------------------------*/
void Flash_KeyWriteValue( u8 value)
{
//  u8 key;
//  u8 i;
//  u8 TempReadRomValue;

//  key = value; 

//  TempReadRomValue = Rom.ReadValue;                       
//  
//  for(i = 0;((Rom.WriteValue != TempReadRomValue)&&(i < 5));i++)
//  {
//    Flash_Sector_Write(Rom.PageAddress + Rom.OffsetAddressTar, key);
//    TempReadRomValue = *(uint8 code *)(Rom.PageAddress + Rom.OffsetAddressTar);
//  }
//  
//  if(Rom.WriteValue == TempReadRomValue)
//  {
//    Rom.ReadValue = TempReadRomValue;
//  }                                                                    //读出有效数据
}