//*********************************************************************************** // Ver 1.0 // 2021.11.19 1、新建文件。 //*********************************************************************************** #ifndef __BQ769x0__H #define __BQ769x0__H //*********************************************************** #define CHIP_SIZE 1 //2片 //#define CHIP_CELL_MAX 10 //BQ76930 #define CHIP_CELL_MAX 15 //BQ76940 #define CHIP_NTC_MAX 3 #define CELL_SIZE_CHIP0 14 #define CELL_SIZE_CHIP1 14 //#define CELL_SIZE (CELL_SIZE_CHIP0+CELL_SIZE_CHIP1) #define CELL_SIZE (CELL_SIZE_CHIP0) #define CELL_MASK_CHIP0 0x5fff #define CELL_MASK_CHIP1 0x5fff //#define CELL_MASK ((CELL_MASK_CHIP1<<16)+CELL_MASK_CHIP0) #define CELL_MASK (CELL_MASK_CHIP0) #define NTC_SIZE_CHIP0 3 //2个外部温度点,两个芯片内部温度点 #define NTC_SIZE_CHIP1 3 #define NTC_SIZE_EXT 1 //#define NTC_SIZE (NTC_SIZE_CHIP0+NTC_SIZE_CHIP1) #define NTC_SIZE (NTC_SIZE_CHIP0 + NTC_SIZE_EXT) #define NTC_MASK_CHIP0 0x0007 #define NTC_MASK_CHIP1 0x0007 //#define NTC_MASK ((NTC_MASK_CHIP1<<16)+NTC_MASK_CHIP0) #define NTC_MASK (NTC_MASK_CHIP0) //电芯接线表 // VC1 VC2 VC3 VC4 VC5 VC6 VC7 VC8 VC9 VC10 VC11 VC12 VC13 VC14 VC15 //3S CELL = 1 1 0 0 1 //4S CELL = 1 1 1 0 1 //5S CELL = 1 1 1 1 1 //6S CELL = 1 1 0 0 1 1 1 0 0 1 //7S CELL = 1 1 1 0 1 1 1 0 0 1 //8S CELL = 1 1 1 0 1 1 1 1 0 1 //9S CELL = 1 1 1 1 1 1 1 1 0 1 //10S CELL = 1 1 1 1 1 1 1 1 1 1 //9S CELL = 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 //10S CELL = 1 1 1 0 1 1 1 0 0 1 1 1 0 0 1 //11S CELL = 1 1 1 0 1 1 1 1 0 1 1 1 0 0 1 //12S CELL = 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 //13S CELL = 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 //14S CELL = 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 //15S CELL = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 enum{ CELL0_REMAP = (1 << 0), //1S CELL1_REMAP = (1 << 1), //2S CELL2_REMAP = (1 << 2), //3S CELL3_REMAP = (1 << 4), //4S CELL4_REMAP = (1 << 5), //5S CELL5_REMAP = (1 << 6), //6S CELL6_REMAP = (1 << 10), //7S CELL7_REMAP = (1 << 7), CELL8_REMAP = (1 << 8), CELL9_REMAP = (1 << 9), CELL10_REMAP = (1 << 10), CELL11_REMAP = (1 << 11), CELL12_REMAP = (1 << 12), CELL13_REMAP = (1 << 13), CELL14_REMAP = (1 << 14), }; //************************************************************* //BOOT_UP初始化 #define BQ769x0_GpioInit() do{ \ BQ769x0_BootUpInit(); \ BQ769x0_AlertInit(); \ BQ769x0_PdsgInit(); \ }while(0) //BOOT_UP输出控制,P61->PA2 #define BQ769x0_BootUpInit() GPIO_Init(GPIOA, GPIO_Pin_2, 1, GPIO_Mode_OUT, GPIO_Speed_2MHz, GPIO_OType_PP, GPIO_PuPd_NOPULL) #define BQ769x0_BootUp(NewState) do{ \ if(NewState == DISABLE) GPIO_ClrBit(GPIOA, GPIO_Pin_2); \ else GPIO_SetBit(GPIOA, GPIO_Pin_2); \ }while(0) //PACK_VOLT检测,P62->PA3 #define BQ769x0_PackMonInit() GPIO_Init(GPIOA, GPIO_Pin_3, 1, GPIO_Mode_OUT, GPIO_Speed_2MHz, GPIO_OType_PP, GPIO_PuPd_NOPULL) #define BQ769x0_PackMon(NewState) do{ \ if(NewState == DISABLE) GPIO_ClrBit(GPIOA, GPIO_Pin_3); \ else GPIO_SetBit(GPIOA, GPIO_Pin_3); \ }while(0) //BQ76200 PDSG控制引脚,P31->PA5 #define BQ769x0_PdsgInit() GPIO_Init(GPIOA, GPIO_Pin_5, 0, GPIO_Mode_OUT, GPIO_Speed_2MHz, GPIO_OType_PP, GPIO_PuPd_NOPULL) #define BQ769x0_Pdsg(NewState) do{ \ GPIO_WritePin(GPIOA, GPIO_Pin_5, NewState); \ BATT_FLAG_PCFET = NewState; \ }while(0) //BQ76930 Alert,P63->PA4 #define BQ769x0_AlertInit() GPIO_Init(GPIOA, GPIO_Pin_4, 1, GPIO_Mode_IN, GPIO_Speed_2MHz, GPIO_OType_PP, GPIO_PuPd_NOPULL) //按键读取 #define BQ769x0_AlertRead() KEY_WriteFlag(ALERT, New, (!GPIO_ReadPin(GPIOA, GPIO_Pin_4))) //********************************************************************* //I2C接口地址 #if 1 #define BQ769x0_I2cInit() I2CS_Init1(I2CS0, 10000) #define BQ769x0_I2cRead(Reg, ptr, len) I2CS_ReadMultiByte(I2CS0, BQ769x0_ADDR, Reg, ptr, len) #define BQ769x0_I2cWrite(Reg, ptr, len) I2CS_WriteMultiByte(I2CS0, BQ769x0_ADDR, Reg, ptr, len) #else #define BQ769x0_I2cInit() I2C_Init1(I2CS1, 10000) #define BQ769x0_I2cReadWord(Reg, ptr) I2C_ReadMultiByte(I2CS1, BQ769x0_ADDR, Reg, ptr, 3) #define BQ769x0_I2cReadByte(Reg, ptr) I2C_ReadMultiByte(I2CS1, BQ769x0_ADDR, Reg, ptr, 2) #define BQ769x0_I2cWriteByte(Reg, ptr) I2C_WriteMultiByte(I2CS1, BQ769x0_ADDR, Reg, ptr, 2) #endif //********************************************************************* #define BQ769x0_Time_Cnt (100) #define BQ769x0_CURR (5000) #define BQ769x0_CURR_Cali (5800) #define VCx_SIZE (6) #define VCxp_SIZE (10) #define VCx_MASK (0x273) #define TSx_SIZE (2UL) #define TSx_MASK (0x0f) #define BQ769x0_ADDR (0x08<<1) #define BQ769x0_CRC //芯片无CRC功能注释此行, //************************************************************* typedef struct { INT8U Addr; INT8U Reg; INT8U Data1; INT8U Crc1; INT8U Data2; INT8U Crc2; INT8U C_Crc1; INT8U C_Crc2; } SBS_CRC_Str; typedef union{ INT16U BYTES; struct{ INT8U BA1_5:5; INT8U BA5_10:5; INT8U BA11_15:5; INT8U Res1:1; }BITS; }BALANCE_Str; //********************************************************************* #define BQ769x0_CONFIG BATT_Info.Flash.Config #define BQ769x0_FLASH FLASH_Info.Config typedef struct{ //寄存器 // INT32U Info; union{ INT8U BYTES; struct{ INT8U OCD:1; INT8U SCD:1; INT8U OV:1; INT8U UV:1; INT8U OVRD_ALERT:1; INT8U DEVICE_XREAD:1; INT8U Res1:1; INT8U CC_READY:1; }BITS; }SYS_STAT_Str; #define SYS_STAT_ADDR 0x00 #define SYS_STAT_OCD BQ769x0_CONFIG.SYS_STAT_Str.BITS.OCD #define SYS_STAT_SCD BQ769x0_CONFIG.SYS_STAT_Str.BITS.SCD #define SYS_STAT_UV BQ769x0_CONFIG.SYS_STAT_Str.BITS.UV #define SYS_STAT_OV BQ769x0_CONFIG.SYS_STAT_Str.BITS.OV #define SYS_STAT_OVRD_ALERT BQ769x0_CONFIG.SYS_STAT_Str.BITS.OVRD_ALERT #define SYS_STAT_DEVICE_XREAD BQ769x0_CONFIG.SYS_STAT_Str.BITS.DEVICE_XREAD #define SYS_STAT_CC_READY BQ769x0_CONFIG.SYS_STAT_Str.BITS.CC_READY #define SYS_STAT_RT BQ769x0_CONFIG.SYS_STAT_Str.BITS.Res1 #define SYS_STAT BQ769x0_CONFIG.SYS_STAT_Str.BYTES #define FLASH_SYS_STAT BQ769x0_FLASH.SYS_STAT_Str.BYTES //寄存器 union{ INT8U BYTES; struct{ INT8U CB1:1; INT8U CB2:1; INT8U CB3:1; INT8U CB4:1; INT8U CB5:1; INT8U Res1:3; }BITS; }CELLBAL1_Str; #define CELLBAL1_ADDR 0x01 #define CELLBAL_CB1 BQ769x0_CONFIG.CELLBAL1_Str.BITS.CB1 #define CELLBAL_CB2 BQ769x0_CONFIG.CELLBAL1_Str.BITS.CB2 #define CELLBAL_CB3 BQ769x0_CONFIG.CELLBAL1_Str.BITS.CB3 #define CELLBAL_CB4 BQ769x0_CONFIG.CELLBAL1_Str.BITS.CB4 #define CELLBAL_CB5 BQ769x0_CONFIG.CELLBAL1_Str.BITS.CB5 #define CELLBAL1 BQ769x0_CONFIG.CELLBAL1_Str.BYTES #define FLASH_CELLBAL1 BQ769x0_FLASH.CELLBAL1_Str.BYTES //寄存器 union{ INT8U BYTES; struct{ INT8U CB6:1; INT8U CB7:1; INT8U CB8:1; INT8U CB9:1; INT8U CB10:1; INT8U Res1:3; }BITS; }CELLBAL2_Str; #define CELLBAL2_ADDR 0x02 #define CELLBAL_CB6 BQ769x0_CONFIG.CELLBAL2_Str.BITS.CB6 #define CELLBAL_CB7 BQ769x0_CONFIG.CELLBAL2_Str.BITS.CB7 #define CELLBAL_CB8 BQ769x0_CONFIG.CELLBAL2_Str.BITS.CB8 #define CELLBAL_CB9 BQ769x0_CONFIG.CELLBAL2_Str.BITS.CB9 #define CELLBAL_CB10 BQ769x0_CONFIG.CELLBAL2_Str.BITS.CB10 #define CELLBAL2 BQ769x0_CONFIG.CELLBAL2_Str.BYTES #define FLASH_CELLBAL2 BQ769x0_FLASH.CELLBAL2_Str.BYTES //寄存器 union{ INT8U BYTES; struct{ INT8U CB11:1; INT8U CB12:1; INT8U CB13:1; INT8U CB14:1; INT8U CB15:1; INT8U Res1:3; }BITS; }CELLBAL3_Str; #define CELLBAL3_ADDR 0x03 #define CELLBAL_CB11 BQ769x0_CONFIG.CELLBAL3_Str.BITS.CB11 #define CELLBAL_CB12 BQ769x0_CONFIG.CELLBAL3_Str.BITS.CB12 #define CELLBAL_CB13 BQ769x0_CONFIG.CELLBAL3_Str.BITS.CB13 #define CELLBAL_CB14 BQ769x0_CONFIG.CELLBAL3_Str.BITS.CB14 #define CELLBAL_CB15 BQ769x0_CONFIG.CELLBAL3_Str.BITS.CB15 #define CELLBAL3 BQ769x0_CONFIG.CELLBAL3_Str.BYTES #define FLASH_CELLBAL3 BQ769x0_FLASH.CELLBAL3_Str.BYTES //寄存器 union{ INT8U BYTES; struct{ INT8U SHUT_AB:2; INT8U Res1:1; INT8U TEMP_SEL:1; INT8U ADC_EN:1; INT8U Res2:2; INT8U LOAD_PRESENT:1; }BITS; }SYS_CTRL1_Str; #define SYS_CTRL1_ADDR 0x04 #define SYS_CTRL1_SHUT_AB BQ769x0_CONFIG.SYS_CTRL1_Str.BITS.SHUT_AB #define SYS_CTRL1_TEMP_SEL BQ769x0_CONFIG.SYS_CTRL1_Str.BITS.TEMP_SEL #define SYS_CTRL1_ADC_EN BQ769x0_CONFIG.SYS_CTRL1_Str.BITS.ADC_EN #define SYS_CTRL1_LOAD_PRESENT BQ769x0_CONFIG.SYS_CTRL1_Str.BITS.LOAD_PRESENT #define SYS_CTRL1 BQ769x0_CONFIG.SYS_CTRL1_Str.BYTES #define FLASH_SYS_CTRL1 BQ769x0_FLASH.SYS_CTRL1_Str.BYTES //寄存器 union{ INT8U BYTES; struct{ INT8U CHG_ON:1; INT8U DSG_ON:1; INT8U Res1:3; INT8U CC_ONESHOT:1; INT8U CC_EN:1; INT8U DELAY_DIS:1; }BITS; }SYS_CTRL2_Str; #define SYS_CTRL2_ADDR 0x05 #define SYS_CTRL2_CHG_ON BQ769x0_CONFIG.SYS_CTRL2_Str.BITS.CHG_ON #define SYS_CTRL2_DSG_ON BQ769x0_CONFIG.SYS_CTRL2_Str.BITS.DSG_ON #define SYS_CTRL2_CC_ONESHOT BQ769x0_CONFIG.SYS_CTRL2_Str.BITS.CC_ONESHOT #define SYS_CTRL2_CC_EN BQ769x0_CONFIG.SYS_CTRL2_Str.BITS.CC_EN #define SYS_CTRL2_DELAY_DIS BQ769x0_CONFIG.SYS_CTRL2_Str.BITS.DELAY_DIS #define SYS_CTRL2 BQ769x0_CONFIG.SYS_CTRL2_Str.BYTES #define FLASH_SYS_CTRL2 BQ769x0_FLASH.SYS_CTRL2_Str.BYTES //寄存器 union{ INT8U BYTES; struct{ INT8U SCD_THRESHOLD:3; INT8U SCD_DELAY:2; INT8U Res1:2; INT8U RSNS:1; }BITS; }PROTECT1_Str; #define PROTECT1_ADDR 0x06 #define PROTECT1_SCD_THRESHOLD BQ769x0_CONFIG.PROTECT1_Str.BITS.SCD_THRESHOLD #define PROTECT1_SCD_DELAY BQ769x0_CONFIG.PROTECT1_Str.BITS.SCD_DELAY #define PROTECT1_RSNS BQ769x0_CONFIG.PROTECT1_Str.BITS.RSNS #define PROTECT1 BQ769x0_CONFIG.PROTECT1_Str.BYTES #define FLASH_PROTECT1 BQ769x0_FLASH.PROTECT1_Str.BYTES //参数定义 #define SCD_70uS 0x00 #define SCD_100uS 0x01 #define SCD_200uS 0x02 #define SCD_400uS 0x03 #define SCD_22mV 0x00 #define SCD_33mV 0x01 #define SCD_44mV 0x02 #define SCD_56mV 0x03 #define SCD_67mV 0x04 #define SCD_78mV 0x05 #define SCD_89mV 0x06 #define SCD_100mV 0x07 #define SCD_111mV 0x83 #define SCD_133mV 0x84 #define SCD_155mV 0x85 #define SCD_178mV 0x86 #define SCD_200mV 0x87 //寄存器 union{ INT8U BYTES; struct{ INT8U OCD_THRESHOLD:4; INT8U OCD_DELAY:4; }BITS; }PROTECT2_Str; #define PROTECT2_ADDR 0X07 #define PROTECT2_OCD_THRESHOLD BQ769x0_CONFIG.PROTECT2_Str.BITS.OCD_THRESHOLD #define PROTECT2_OCD_DELAY BQ769x0_CONFIG.PROTECT2_Str.BITS.OCD_DELAY #define PROTECT2 BQ769x0_CONFIG.PROTECT2_Str.BYTES #define FLASH_PROTECT2 BQ769x0_CONFIG.PROTECT2_Str.BYTES //参数定义 #define OCD_10mS 0x00 #define OCD_20mS 0x01 #define OCD_40mS 0x02 #define OCD_80mS 0x03 #define OCD_160mS 0x04 #define OCD_320mS 0x05 #define OCD_640mS 0x06 #define OCD_1280mS 0x07 #define OCD_8mV 0x00 #define OCD_11mV 0x01 #define OCD_14mV 0x02 #define OCD_17mV 0x03 #define OCD_19mV 0x04 #define OCD_22mV 0x05 #define OCD_25mV 0x06 #define OCD_28mV 0x07 #define OCD_31mV 0x08 #define OCD_33mV 0x09 #define OCD_36mV 0x0a #define OCD_39mV 0x0b #define OCD_42mV 0x0c #define OCD_44mV 0x0d #define OCD_47mV 0x0e #define OCD_50mV 0x0f #define OCD_56mV 0x87 #define OCD_61mV 0x88 #define OCD_67mV 0x89 #define OCD_72mV 0x8a #define OCD_78mV 0x8b #define OCD_83mV 0x8c #define OCD_89mV 0x8d #define OCD_94mV 0x8e #define OCD_100mV 0x8f //寄存器 union{ INT8U BYTES; struct{ INT8U Res1:4; INT8U OV_DELAY:2; INT8U UV_DELAY:2; }BITS; }PROTECT3_Str; #define PROTECT3_ADDR 0X08 #define PROTECT3_UV_DELAY BQ769x0_CONFIG.PROTECT3_Str.BITS.UV_DELAY #define PROTECT3_OV_DELAY BQ769x0_CONFIG.PROTECT3_Str.BITS.OV_DELAY #define PROTECT3 BQ769x0_CONFIG.PROTECT3_Str.BYTES #define FLASH_PROTECT3 BQ769x0_FLASH.PROTECT3_Str.BYTES //参数定义 #define UV_1S 0x00 #define UV_4S 0x01 #define UV_8S 0x02 #define UV_16S 0x03 #define OV_1S 0x00 #define OV_2S 0x01 #define OV_4S 0x02 #define OV_8S 0x03 //寄存器 INT8U OV_THRESH_Byte; #define OV_THRESH_ADDR 0x09 #define OV_THRESH BQ769x0_CONFIG.OV_THRESH_Byte #define FLASH_OV_THRESH BQ769x0_FLASH.OV_THRESH_Byte //默认设置值 #define OV_THRESH_Default 0xc7 //寄存器 INT8U UV_THRESH_Byte; #define UV_THRESH BQ769x0_CONFIG.UV_THRESH_Byte #define FLASH_UV_THRESH BQ769x0_FLASH.UV_THRESH_Byte #define UV_THRESH_ADDR 0x0a //默认设置值 #define UV_THRESH_Default 0x1a //寄存器 INT8U CC_CFG_Byte; #define CC_CFG_ADDR 0x0b #define CC_CFG BQ769x0_CONFIG.CC_CFG_Byte #define FLASH_CC_CFG BQ769x0_FLASH.CC_CFG_Byte //默认设置值 #define CC_CFG_Default 0x19 INT8U UV3_THRESH_Byte; #define UV3_THRESH BQ769x0_CONFIG.UV3_THRESH_Byte #define FLASH_UV3_THRESH BQ769x0_FLASH.UV3_THRESH_Byte INT8U OV3_THRESH_Byte; #define OV3_THRESH BQ769x0_CONFIG.OV3_THRESH_Byte #define FLASH_OV3_THRESH BQ769x0_FLASH.OV3_THRESH_Byte }BQ769x0_Str1; #define BQ769x0_REG BATT_Info.Info.Reg typedef struct{ //电芯电压读取寄存器 INT16U Vc[15+1]; #define VC1_ADDR 0x0c #define BQ769x0_Vc BQ769x0_REG.Vc //INT16U VBAT; #define BAT_ADDR 0x2a #define BQ769x0_Batt BQ769x0_REG.Vc[15] //温度读取寄存器 INT16U Ts[3]; #define TS1_ADDR 0x2c #define BQ769x0_Ts BQ769x0_REG.Ts INT16U_Str CC_Str; #define CC_HI_ADDR 0x32 #define CC_LO_ADDR 0x33 #define CC_HI_BYTE BQ769x0_REG.CC_Str.BYTES[0] #define CC_LO_BYTE BQ769x0_REG.CC_Str.BYTES[1] #define CC BQ769x0_REG.CC_Str.HALFWORDS //ADC GAIN union{ INT8U BYTES; struct{ INT8U Res1:2; INT8U GAIN:2; INT8U Res2:4; }BITS; }ADCGAIN1_Str; #define ADCGAIN1_ADDR 0x50 #define ADC_GAIN1 BQ769x0_REG.ADCGAIN1_Str.BITS.GAIN #define ADCGAIN1 BQ769x0_REG.ADCGAIN1_Str.BYTES union{ INT8U BYTES; struct{ INT8U Res1:5; INT8U GAIN:3; }BITS; }ADCGAIN2_Str; #define ADCGAIN2_ADDR 0x59 #define ADC_GAIN2 BQ769x0_REG.ADCGAIN2_Str.BITS.GAIN #define ADCGAIN2 BQ769x0_REG.ADCGAIN2_Str.BYTES //ADC增益 union{ INT8U ADC_GAIN_Byte; struct{ INT8U GAIN2:3; INT8U GAIN1:2; INT8U Res1:3; }BITS; }ADC_GAIN_Str; #define ADC_BaseGain 365 #define ADC_GainStep 1 INT32S ADC_Gain_Word; #define ADC_GAIN BQ769x0_REG.ADC_Gain_Word //ADC偏差 INT8S ADCOFFSET_Byte; #define ADCOFFSET BQ769x0_REG.ADCOFFSET_Byte #define ADCOFFSET_ADDR 0x51 INT16U VcMask; INT16U TsMask; INT8U Addr; INT8U Id; INT8U CellNum; INT8U TemNum; INT8U ReadCnt; INT8U CommCnt; INT8U BlaCnt; INT8U CrgLink; INT8U FetOn; // INT16U CommCnt; }BQ769x0_Str2; #define ADC_GAIN_Calculate() do{ \ BQ769x0_REG.ADC_GAIN_Str.BITS.GAIN1 = ADC_GAIN1; \ BQ769x0_REG.ADC_GAIN_Str.BITS.GAIN2 = ADC_GAIN2; \ BQ769x0_REG.ADC_Gain_Word = (INT32S)BQ769x0_REG.ADC_GAIN_Str.ADC_GAIN_Byte + ADC_BaseGain; \ }while(0) #define BQ769x0_InfoInit() do{ \ MEM_Fill((INT8U *)&BQ769x0_REG, 0, sizeof(BQ769x0_Str2)); \ }while(0) //********************************************************************* #define CC_OFFSET BATT_Info.Flash.CcOffset #define FLASH_CC_OFFSET FLASH_Info.CcOffset #define BQ769x0_VcMask BQ769x0_REG.VcMask #define BQ769x0_TsMask BQ769x0_REG.TsMask #define BQ769x0_BlaCnt BQ769x0_REG.BlaCnt #define BQ769x0_CommCnt BQ769x0_REG.CommCnt #define BQ769x0_FetOn BQ769x0_REG.FetOn #define BQ769x0_MosFetFlag(FETx, NewState) do{ \ if(NewState == DISABLE) BQ769x0_FetOn &= ~(FETx); \ else BQ769x0_FetOn |= (FETx); \ }while(0) //********************************************************************* #if 0 //BQ769x0空闲时间函数,时间基数0.1秒 #define BQ769x0_IDLE_DLY(Value) BQ769x0_IdleCnt = 1+(Value/100) #define BQ769x0_IDLE_CNT_Reset() BQ769x0_IDLE_DLY(20000) #define BQ769x0_IDLE_Cnt() do{ \ if(BQ769x0_IdleCnt > 0) \ { \ BQ769x0_IdleCnt --; \ } \ }while(0) #endif //通信计时 #define BQ769x0_CommCntState() BATT_FLAG_COMMERR #define BQ769x0_ResetCommCnt() do{ \ BQ769x0_CommCnt = 1000 / 10; \ BATT_FLAG_COMMERR = 1; \ }while(0) #define BQ769x0_CommCount() do{ \ if(BQ769x0_CommCnt > 0) BQ769x0_CommCnt--; \ else BATT_FLAG_COMMERR = 2; \ }while(0) //********************************************************************* // extern void BQ769x0_Init(void); extern void BQ769x0_ChipInit(void); extern void BQ769x0_FlashInfoInit(void); extern INT8U BQ769x0_WriteByte(INT8U RegAddr, INT8U Value); extern void BQ769x0_ReadFlag(void); extern INT8U BQ769x0_ClrFlag(INT8U RegAddr); extern INT8U BQ769x0_Mosfet(INT8U Fet, INT8U NewState); extern INT8U BQ769x0_PowerDown(void); extern void BQ769x0_ReadCellCurrent(void); extern void BQ769x0_ReadCellVoltage(void); extern void BQ769x0_ReadCellTemp(void); extern void BQ769x0_FetCheck(void); extern void BQ769x0_Balance(INT16U BalanceMask); extern void BQ769x0_CurrentCalibration(INT32S Value); extern void BQ769x0_VoltageOffsetCalibration(INT32S Value); #endif