Weight_Bed/IAP_Init.c

95 lines
2.2 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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~0X1FFFFFLASH物理地址
* 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;
}