ZDBMS/code_drv/AFE.c

518 lines
14 KiB
C
Raw Permalink Normal View History

2025-02-06 07:35:32 +00:00
/********************************************************************************
Copyright (C), Sinowealth Electronic. Ltd.
Author: Sino
Version: V0.0
Date: 2020/04/26
History:
V2.0 2020/04/26 Preliminary
********************************************************************************/
#include "Main.h"
//AFE<46><45><EFBFBD>صı<D8B5><C4B1><EFBFBD>
BOOL bAfeAlarmFlg;
BOOL bCADCFlg;
BOOL bVADCFlg;
BOOL bAfeI2CRWErrFlg;
BOOL bAfeErr;
U8 data ucCellNum; //<2F><>ǰӲ<C7B0><D3B2><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD><EFBFBD>
U8 data ucCellNumOffset; //<2F><>ǰӲ<C7B0><D3B2><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD>ӷ<EFBFBD>ʽ<EFBFBD><CABD>Ӧ<EFBFBD><D3A6>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ȡAFE<46><45>Ӧ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
U16 data uiCellVmax; //<2F><>о<EFBFBD><D0BE>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>ֵ
U16 data uiCellVmin; //<2F><>о<EFBFBD><D0BE>ѹ<EFBFBD><D1B9>Сֵ
U16 xdata uiVadcVmax; //ADC<44>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>ֵ
U16 xdata uiVadcVmin; //ADC<44>ɼ<EFBFBD><C9BC><EFBFBD>Сֵ
U8 xdata ucTempeMiddle;
U16 xdata uiTempeMin;
U16 xdata uiTempeMax;
S32 xdata slCadcCurrent;
S32 xdata slCadcCurAverage;
U8 xdata ucCadcCnt;
S32 xdata slCadcCurBuf[16];
U8 xdata ucAfeI2CErrDelayCnt;
SYSINFOR xdata Info; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
AFEDATA xdata AFE; //AFE<46>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ֵ
AFEREG xdata REG; //AFE<46>Ĵ<EFBFBD><C4B4><EFBFBD>Ԥ<EFBFBD><D4A4>ֵ
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AFETwiCheck
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>5S<EFBFBD><EFBFBD><EFBFBD>AFE<EFBFBD><EFBFBD>I2CͨѶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λbAfeErr=1
*************************************************************************************************/
void AFETwiCheck(void)
{
if(bAfeI2CRWErrFlg)
{
if(++ucAfeI2CErrDelayCnt >= TIME_1S_5S)
{
bAfeErr = 1;
ucAfeI2CErrDelayCnt = TIME_1S_5S;
}
}
else
{
ucAfeI2CErrDelayCnt = 0;
}
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AFEWriteReg
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: Reg<EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
WrBuf<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>1Byte<EFBFBD><EFBFBD><EFBFBD><EFBFBD>+1Byte CRC
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: 1:<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>0:ʧ<EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: дAFE<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD>дһ<EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
BOOL AFEWriteReg(U8 Reg, U8 Length, U8 xdata *WrBuf)
{
BOOL Result = 0;
U8 Times = 0;
U8 i;
if(!bAfeErr)
{
for(i=0; i<Length; i++)
{
while(Times++ < 5)
{
#ifdef TWI_Hardware_Module
{
Result = TwiWrite(AFE_ID, Reg, TWI_ADDR_1B, 1, TWI_CRC_YES, WrBuf);
}
#else
{
Result = TwiWrite(AFE_ID, Reg, 1, WrBuf);
}
#endif
if(Result)
{
break;
}
else
{
TWICON = 0; //Close TWI module
Delay1ms(1);
TwiInit(); //Reinitial
Delay1ms(1);
}
}
if(Times >= 5)
{
break;
}
else
{
Times = 0;
Reg++;
WrBuf++;
}
Delay1ms(1);
}
}
bAfeI2CRWErrFlg = !Result; //<2F><><EFBFBD><EFBFBD>ͨѶ<CDA8>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
return Result;
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AFEReadReg
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: Reg<EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
RdBuf<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>2Byte<EFBFBD><EFBFBD><EFBFBD><EFBFBD>+1Byte CRC
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: 1:<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>0:ʧ<EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>AFE<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
BOOL AFEReadReg(U8 Reg, U8 Length , U8 xdata *RdBuf)
{
BOOL Result = 0;
U8 Times = 0;
if(!bAfeErr)
{
while(Times++ < 5) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Try 5<><35>
{
#ifdef TWI_Hardware_Module
Result = TwiRead(AFE_ID, Reg, TWI_ADDR_1B, Length, TWI_CRC_YES, RdBuf);
#else
Result = TwiRead(AFE_ID, Reg, Length, RdBuf);
#endif
if(Result) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>CRCУ<43><D0A3><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD>سɹ<D8B3><C9B9><EFBFBD><EFBFBD><EFBFBD>־
{
break;
}
else //<2F><><EFBFBD><EFBFBD>TWI<57><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CRCУ<43><D0A3>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>ʱ1mS֮<53><D6AE><EFBFBD>ٶ<EFBFBD>ȡ
{
TWICON = 0; //Close TWI module
Delay1ms(1);
TwiInit(); //Reinitial
Delay1ms(1);
}
}
}
bAfeI2CRWErrFlg = !Result; //<2F><><EFBFBD><EFBFBD>ͨѶ<CDA8>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
return Result;
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AFEClrFlg
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>:
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>AFE<EFBFBD><EFBFBD>־<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void AFEClrFlg(void)
{
if(AFEReadReg(AFE_FLAG1, 2, &REG.AFEFLAG1))
{
if((REG.AFEFLAG1!=0) || (REG.AFEFLAG2!=0))
{
REG.AFESCONF1 |= 0x80;
AFEWriteReg(AFE_SCONF1, 1, &REG.AFESCONF1);
REG.AFESCONF1 &= ~0x80;
AFEWriteReg(AFE_SCONF1, 1, &REG.AFESCONF1);
}
}
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AFEInitReg
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>AFE<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void AFEInitReg(void)
{
U16 TempVar;
REG.AFEINTEN = 0x00; //<2F><>ȡ<EFBFBD><C8A1>ѯʽ<D1AF><CABD><EFBFBD>ʲ<EFBFBD><CAB2><EFBFBD>ҪALARM<52>ж<EFBFBD>
REG.AFESCONF1 = 0x50; //ʹ<><CAB9>CTLD<4C><44>WDT<44><54><EFBFBD><EFBFBD>
REG.AFESCONF2 = 0x00; //AFE<46><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD>źţ<C5BA>ALARM<52><4D><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ŵ<EFBFBD>MOS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MOS<4F><53><EFBFBD>ر<EFBFBD>
REG.AFESCONF3 = 0xF8; //Ĭ<><C4AC>VADC<44><43>CADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10λADC<44><43>VADCֻ<43>ɼ<EFBFBD><C9BC><EFBFBD>ѹת<D1B9><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>50ms
REG.AFESCONF4 = 0x00; //Ĭ<>Ϲر<CFB9>ƽ<EFBFBD><C6BD>BAT6-10
REG.AFESCONF5 = 0x00; //Ĭ<>Ϲر<CFB9>ƽ<EFBFBD><C6BD>BAT1-5
REG.AFESCONF6 = 0x70; //CADC<44>ɼ<EFBFBD>200mV<6D><56>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>λ<EFBFBD>źſ<C5BA><C5BF><EFBFBD>1S<31><53>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ100mV<6D><56>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ50uS
REG.AFESCONF7 = 0x01; //Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B1A3><EFBFBD><EFBFBD>ʱ1<CAB1><31>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD>ŵ<EFBFBD>״̬<D7B4><CCAC>ֵѡ<D6B5><D1A1>λ1.4mV<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD>Ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10S
REG.AFESCONF8 = 0x03; //SCONF8 + SCONF9 = 11 1111 1111 = 1023
REG.AFESCONF9 = 0xff; //Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B1A3><EFBFBD><EFBFBD>ֵ1023*5.86mV = 5994.78
REG.AFESCONF10= 0x00; //<2F>͹<EFBFBD><CDB9>Ŀ<EFBFBD><C4BF><EFBFBD>λ<EFBFBD><CEBB>д<EFBFBD><D0B4>0x33<33><33>дPD_EN=1<><31><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><CDB9><EFBFBD>
if(bSC_EN) //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>AFE<46><45>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
{
REG.AFESCONF1 |= 0x08;
REG.AFESCONF6 |= (E2ucAFEProtectConfig&0x0f);//<2F><>FLASH<53>ڲ<EFBFBD><DAB2><EFBFBD>д<EFBFBD><D0B4>AFE<46>Ĵ<EFBFBD><C4B4><EFBFBD>
}
if(bOV_EN) //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>AFE<46><45>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
{
REG.AFESCONF1 |= 0x04;
REG.AFESCONF7 |= (E2ucAFEProtectConfig&0xf0);//<2F><>FLASH<53>ڲ<EFBFBD><DAB2><EFBFBD>д<EFBFBD><D0B4>AFE<46>Ĵ<EFBFBD><C4B4><EFBFBD>
TempVar = (U32)E2uiAFEOVvol*50/293; //ȡ<><C8A1><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ
REG.AFESCONF8 = TempVar>>8; //д<><D0B4><EFBFBD><EFBFBD>λ
REG.AFESCONF9 = TempVar; //д<>Ͱ<EFBFBD>λ
}
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AFEInit
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>:
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: 1:<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>0:ʧ<EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>AFE
*************************************************************************************************/
BOOL AFEInit(void)
{
U8 xdata RdBuf[2];
U8 i;
BOOL Result = 1;
U8 j = 3;
while(j--)
{
if( AFEWriteReg(AFE_INT_EN, 11, &REG.AFEINTEN))
{
for(i=3; i<=11; i=i+2)
{
AFEReadReg(i, 2, RdBuf);
if((RdBuf[0]!=*(&REG.AFEFLAG1+i)) || (RdBuf[1]!=*(&REG.AFEFLAG1+i+1)))
{
if(i != 7) //ƽ<><C6BD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A3AC>Ϊƽ<CEAA><C6BD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>30s<30><73><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
{
Result = 0;
break;
}
}
}
}
else
{
Result = 0;
}
if(Result)
{
break;
}
}
return Result;
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AFERdFlg
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>:
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ȡAFE<EFBFBD><EFBFBD>־<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
AFE_SC<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FLAG2<EFBFBD><EFBFBD>bit2Ϊ1<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>LVR<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><EFBFBD>AFE
*************************************************************************************************/
void AFERdFlg(void)
{
if(AFEReadReg(AFE_FLAG1, 2, &REG.AFEFLAG1))
{
if((REG.AFEFLAG2&0x02) != 0) //CADC <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
bCADCFlg = 1;
}
if((REG.AFEFLAG2&0x01) != 0) //VADC <20><>ѹת<D1B9><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
bVADCFlg = 1;
}
if((REG.AFEFLAG1&0x08) != 0 && (bLoadChkingFlg != 1)) //AFE<46><45>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
{
bAFE_SC = 1;
bLoadStartCheckFlg = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>
}
if((REG.AFEFLAG1&0x04) != 0) //AFE Ӳ<><D3B2><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
{
bAFE_OV= 1;
}
if((REG.AFEFLAG2&0x04) != 0) //<2F>ж<EFBFBD>FLAG2<47><32>bit2<74>Ƿ<EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD>ʾAFE<46><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LVR<56><52><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC>AFE<46>Ĵ<EFBFBD><C4B4><EFBFBD>
{
AFEInit();
}
}
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AFERdStatus
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>:
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ȡAFE״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void AFERdStatus(void)
{
U8 RegTemp[2];
if(AFEReadReg(AFE_BSTATUS, 2, RegTemp))//&REG.AFEBSTATUS))//AFE<46>̶<EFBFBD><CCB6><EFBFBD>2Bytes<65><73>ֻȡ1Byte
{
ucAFEStatus = REG.AFEBSTATUS = RegTemp[0]; //<2F><><EFBFBD>³<EFBFBD><C2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صļ<D8B5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AFERamCheck
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>:
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>AFE<EFBFBD>ļĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ񱻸<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><EFBFBD>
*************************************************************************************************/
void AFERamCheck(void)
{
U8 xdata RdBuf[2];
U8 i;
for(i=3; i<=11; i=i+2)
{
AFEReadReg(i, 2, RdBuf);
if((RdBuf[0]!=*(&REG.AFEFLAG1+i)) || (RdBuf[1]!=*(&REG.AFEFLAG1+i+1)))
{
if(i != 7) //ƽ<><C6BD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A3AC>Ϊƽ<CEAA><C6BD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>30s<30><73><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
{
if(!AFEInit())
{
bPDFlg = 1;
}
break;
}
}
}
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AFEEnterPD
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>:
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>AFE<EFBFBD><EFBFBD><EFBFBD><EFBFBD>PD״̬<EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>3.3V<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void AFEEnterPD(void)
{
REG.AFESCONF10 = 0x33;
if(AFEWriteReg(AFE_SCONF10, 1, &REG.AFESCONF10))
{
REG.AFESCONF1 |= 0x20;
AFEWriteReg(AFE_SCONF1, 1, &REG.AFESCONF1);
}
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AFEMosCtl
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MosStatus<EFBFBD><EFBFBD>MOS״̬<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><EFBFBD>ŵ<EFBFBD>MOS<EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹ر<EFBFBD>
*************************************************************************************************/
void AFEMosCtl(U8 MosStatus)
{
REG.AFESCONF2 &= ~0x03;
REG.AFESCONF2 |= MosStatus;
AFEWriteReg(AFE_SCONF2, 1, &REG.AFESCONF2);
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AFEChgerCheckEn<EFBFBD><EFBFBD>AFEChgerCheckDis<EFBFBD><EFBFBD>AFELoadCheckEn<EFBFBD><EFBFBD>AFELoadCheckDis
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>:
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: ʹ<EFBFBD><EFBFBD>/<EFBFBD>رճ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void AFEChgerCheckEn(void)
{
REG.AFESCONF1 |= 0x01;
AFEWriteReg(AFE_SCONF1, 1, &REG.AFESCONF1);
}
void AFEChgerCheckDis(void)
{
REG.AFESCONF1 &= ~0x01;
AFEWriteReg(AFE_SCONF1, 1, &REG.AFESCONF1);
}
void AFELoadCheckEn(void)
{
REG.AFESCONF1 |= 0x02;
AFEWriteReg(AFE_SCONF1, 1, &REG.AFESCONF1);
}
void AFELoadCheckDis(void)
{
REG.AFESCONF1 &= ~0x02;
AFEWriteReg(AFE_SCONF1, 1, &REG.AFESCONF1);
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AfeBalEn
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: BalChTemp<EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>CELL<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD>Ϊ0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>ƽ<EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹ر<EFBFBD>ƽ<EFBFBD><EFBFBD>
*************************************************************************************************/
void AfeBalCtl(U16 BalChTemp)
{
REG.AFESCONF4 = BalChTemp>>5;
if(AFEWriteReg(AFE_SCONF4, 1, &REG.AFESCONF4))
{
REG.AFESCONF5 = BalChTemp;
AFEWriteReg(AFE_SCONF5, 1, &REG.AFESCONF5);
}
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AfeWDTEn<EFBFBD><EFBFBD> AfeWDTDis
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>:
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹رտ<EFBFBD><EFBFBD>Ź<EFBFBD>ģ<EFBFBD><EFBFBD>
*************************************************************************************************/
void AfeWDTEn(void)
{
REG.AFESCONF1 |= 0x10;
AFEWriteReg(AFE_SCONF1, 1, &REG.AFESCONF1);
}
void AfeWDTDis(void)
{
REG.AFESCONF1 &= ~0x10;
AFEWriteReg(AFE_SCONF1, 1, &REG.AFESCONF1);
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AfeWDTEn<EFBFBD><EFBFBD> AfeWDTDis
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹رտ<EFBFBD><EFBFBD>Ź<EFBFBD>ģ<EFBFBD><EFBFBD>
*************************************************************************************************/
void AfeADCEn(void)
{
REG.AFESCONF3 |= 0xf8;
AFEWriteReg(AFE_SCONF3, 1, &REG.AFESCONF3);
}
void AfeADCDis(void)
{
REG.AFESCONF3 &= ~0xf8;
AFEWriteReg(AFE_SCONF3, 1, &REG.AFESCONF3);
}
void AfeCADCEn(void)
{
REG.AFESCONF3 |= 0xe0;
AFEWriteReg(AFE_SCONF3, 1, &REG.AFESCONF3);
}
void AfeCADCDis(void)
{
REG.AFESCONF3 &= ~0xe0;
AFEWriteReg(AFE_SCONF3, 1, &REG.AFESCONF3);
}
void AfeTempADCEn(void)
{
REG.AFESCONF3 |= 0x08;
AFEWriteReg(AFE_SCONF3, 1, &REG.AFESCONF3);
}
void AfeTempADCDis(void)
{
REG.AFESCONF3 &= ~0x08;
AFEWriteReg(AFE_SCONF3, 1, &REG.AFESCONF3);
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AfeAlarmEn<EFBFBD><EFBFBD>AfeAlarmDis
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: AlarmFlg<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>ALARMλ
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹رն<EFBFBD>Ӧ<EFBFBD><EFBFBD>ALARM<EFBFBD>жϴ<EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void AfeAlarmEn(U8 AlarmFlg)
{
REG.AFEINTEN |= AlarmFlg;
AFEWriteReg(AFE_INT_EN, 1, &REG.AFEINTEN);
}
void AfeAlarmDis(U8 AlarmFlg)
{
REG.AFEINTEN &= ~AlarmFlg;
AFEWriteReg(AFE_INT_EN, 1, &REG.AFEINTEN);
}