95 lines
2.2 KiB
C
95 lines
2.2 KiB
C
#include "H/Function_Init.H"
|
||
#include "IAP_Lib/IAP_Option_EW.h"
|
||
unsigned char code* POINT; //该指针指向0x0000
|
||
|
||
#define IAP_APROM 0x00
|
||
#define IAP_UniqueID 0x01
|
||
#define IAP_EEPROM 0x02
|
||
#define IAP_LDROM 0x03
|
||
|
||
unsigned char IAP_Read(unsigned long IAP_IapAddr, unsigned char area);
|
||
|
||
void IAP_Test(void)
|
||
{
|
||
unsigned char IapReadData1,IapReadData2; //定义储存读出数据的变量
|
||
|
||
IAP_CodeSectorEraseOption(0xFFFE); //往CODE 0x1FFFE地址块擦
|
||
IAP_CodeProgramByteOption(0xFFFE, 0x55); //往CODE 0x1FFFE地址写入0x55
|
||
IapReadData1 = IAP_Read(0xFFFE, IAP_APROM); //读取CODE 0x1FFFE地址数据
|
||
|
||
IAP_EEPROMSectorEraseOption(0x1000); //往EEPROM 0x1000地址块擦
|
||
IAP_EEPROMProgramByteOption(0x1000, 0xAA); //往EEPROM 0x1000地址写入0xAA
|
||
IapReadData2 = IAP_Read(0x1000, IAP_EEPROM); //读取EEPROM 0x1000地址数据
|
||
while(1)
|
||
{
|
||
if((IapReadData1 == 0x55) && (IapReadData2 == 0xAA))
|
||
{
|
||
P02 = ~P02;
|
||
}
|
||
else
|
||
{
|
||
P03 = ~P03;
|
||
}
|
||
}
|
||
}
|
||
|
||
/**************************************************
|
||
*函数名称:unsigned char IAP_Read(unsigned long Add,unsigned char ADER)
|
||
*函数功能:单Byte读取
|
||
*入口参数:Add :需要擦除的地址(0X00~0X1FFFF(FLASH物理地址)
|
||
* Data:要写入的Byte,ADER:操作对象 APROM为00,EEPROM为02
|
||
*出口参数:void
|
||
**************************************************/
|
||
unsigned char IAP_Read(unsigned long Add, unsigned char Iapade)
|
||
{
|
||
unsigned char IAP_IapData;
|
||
//保存ROMBNK、IAPADE、EA
|
||
unsigned char tempADER = IAPADE;
|
||
unsigned char tempEA = EA;
|
||
|
||
unsigned char code* point = 0;
|
||
|
||
EA = 0;//关闭中断
|
||
|
||
IAPADE = Iapade;
|
||
|
||
IAP_IapData = *(point + Add);
|
||
|
||
//操作结束恢复ROMBNK、IAPADE、EA,避免MOVC位置出错
|
||
IAPADE = tempADER;
|
||
EA = tempEA;
|
||
|
||
return IAP_IapData;
|
||
|
||
}
|
||
|
||
void EEPROM_Write_k(long Dat)
|
||
{
|
||
uchar i;
|
||
uchar temp[4];
|
||
temp[0] = (Dat >> 24) & 0xFF;
|
||
temp[1] = (Dat >> 16) & 0xFF;
|
||
temp[2] = (Dat >> 8) & 0xFF;
|
||
temp[3] = Dat & 0xFF;
|
||
IAP_EEPROMSectorEraseOption(0x1600); //往EEPROM 0x1000地址块擦!!!!注意擦除是按页擦,不是按字节,一次擦除一页(512Bytes)
|
||
for(i=0;i<4;i++)
|
||
{
|
||
IAP_EEPROMProgramByteOption(0x1600+i,temp[i]); //往EEPROM 0x1000地址写入0xAA
|
||
}
|
||
}
|
||
|
||
long EEPROM_Read_k(void)
|
||
{
|
||
uchar i;
|
||
uchar buff;
|
||
long dat =0;
|
||
for(i=0;i<4;i++)
|
||
{
|
||
buff = IAP_Read(0x1600+i, IAP_EEPROM);
|
||
dat |= (long)buff<<24-i*8;
|
||
}
|
||
return dat;
|
||
}
|
||
|
||
|