518 lines
14 KiB
C
518 lines
14 KiB
C
|
/********************************************************************************
|
|||
|
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, ®.AFEFLAG1))
|
|||
|
{
|
|||
|
if((REG.AFEFLAG1!=0) || (REG.AFEFLAG2!=0))
|
|||
|
{
|
|||
|
REG.AFESCONF1 |= 0x80;
|
|||
|
AFEWriteReg(AFE_SCONF1, 1, ®.AFESCONF1);
|
|||
|
REG.AFESCONF1 &= ~0x80;
|
|||
|
AFEWriteReg(AFE_SCONF1, 1, ®.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, ®.AFEINTEN))
|
|||
|
{
|
|||
|
for(i=3; i<=11; i=i+2)
|
|||
|
{
|
|||
|
AFEReadReg(i, 2, RdBuf);
|
|||
|
|
|||
|
if((RdBuf[0]!=*(®.AFEFLAG1+i)) || (RdBuf[1]!=*(®.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, ®.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))//®.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]!=*(®.AFEFLAG1+i)) || (RdBuf[1]!=*(®.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, ®.AFESCONF10))
|
|||
|
{
|
|||
|
REG.AFESCONF1 |= 0x20;
|
|||
|
AFEWriteReg(AFE_SCONF1, 1, ®.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, ®.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, ®.AFESCONF1);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void AFEChgerCheckDis(void)
|
|||
|
{
|
|||
|
REG.AFESCONF1 &= ~0x01;
|
|||
|
AFEWriteReg(AFE_SCONF1, 1, ®.AFESCONF1);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void AFELoadCheckEn(void)
|
|||
|
{
|
|||
|
REG.AFESCONF1 |= 0x02;
|
|||
|
AFEWriteReg(AFE_SCONF1, 1, ®.AFESCONF1);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void AFELoadCheckDis(void)
|
|||
|
{
|
|||
|
REG.AFESCONF1 &= ~0x02;
|
|||
|
AFEWriteReg(AFE_SCONF1, 1, ®.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, ®.AFESCONF4))
|
|||
|
{
|
|||
|
REG.AFESCONF5 = BalChTemp;
|
|||
|
AFEWriteReg(AFE_SCONF5, 1, ®.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, ®.AFESCONF1);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void AfeWDTDis(void)
|
|||
|
{
|
|||
|
REG.AFESCONF1 &= ~0x10;
|
|||
|
AFEWriteReg(AFE_SCONF1, 1, ®.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, ®.AFESCONF3);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void AfeADCDis(void)
|
|||
|
{
|
|||
|
REG.AFESCONF3 &= ~0xf8;
|
|||
|
AFEWriteReg(AFE_SCONF3, 1, ®.AFESCONF3);
|
|||
|
}
|
|||
|
|
|||
|
void AfeCADCEn(void)
|
|||
|
{
|
|||
|
REG.AFESCONF3 |= 0xe0;
|
|||
|
AFEWriteReg(AFE_SCONF3, 1, ®.AFESCONF3);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void AfeCADCDis(void)
|
|||
|
{
|
|||
|
REG.AFESCONF3 &= ~0xe0;
|
|||
|
AFEWriteReg(AFE_SCONF3, 1, ®.AFESCONF3);
|
|||
|
}
|
|||
|
|
|||
|
void AfeTempADCEn(void)
|
|||
|
{
|
|||
|
REG.AFESCONF3 |= 0x08;
|
|||
|
AFEWriteReg(AFE_SCONF3, 1, ®.AFESCONF3);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void AfeTempADCDis(void)
|
|||
|
{
|
|||
|
REG.AFESCONF3 &= ~0x08;
|
|||
|
AFEWriteReg(AFE_SCONF3, 1, ®.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, ®.AFEINTEN);
|
|||
|
}
|
|||
|
|
|||
|
void AfeAlarmDis(U8 AlarmFlg)
|
|||
|
{
|
|||
|
REG.AFEINTEN &= ~AlarmFlg;
|
|||
|
AFEWriteReg(AFE_INT_EN, 1, ®.AFEINTEN);
|
|||
|
}
|
|||
|
|
|||
|
|