SY883x_For_Clients_langxun-J8/UsrSrc/charger/charger_module.c

290 lines
6.7 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.

/*
******************************************************************************
*
* @file charger_module.c
* @brief charger module
*
*
* @version 1.0
* @date 2022/07/12 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/07/12 Alex build this file
******************************************************************************
*/
/*_____ I N C L U D E S ____________________________________________________*/
#include "charger_module.h"
#include "adc.h"
#include "sys_tim.h"
#include "discharge_module.h"
#include "system.h"
#include "vox_module.h"
#include "led.h"
bit Charger_Done = 0;
#if CHARGER_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define NTC_PRO_DEBOUNCE_TIM 10
/******************************************************************************\
Variables definitions
\******************************************************************************/
//idata TE_CHG_STA ChgStatus; // ϵͳ״̬¶¨Òå
//bit NTC_Low_Pro_Flag = 0;
//bit NTC_High_Pro_Flag = 0;
//bit NTC_CHG_02C_Flag = 0;
//bit NTC_CHG_1C_Flag = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void Charger_init(void)
*
* Description : Charger Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Charger_Init(void)
{
SFRADDR = PMU_CTL1;
SFRDATA |= 0x07; //µç³ØµÍѹ¼ì²â enable Ðźţ»µç³ØµÍѹ¼ì²âµµÎ»Ñ¡Ôñ£º3.3V
/* Setting CV */
REG_CHG2 = 0x00; //0:4.20V;1:4.35V
/* Setting CHG Current */
REG_CHG1 = 0x03; //000:100mA;001:200mA;010:250mA;011:300mA;100:350mA;101:400mA;110:450mA;111:500mA
}
#endif
/*
*******************************************************************************
* void Charger_Current_Set(void)
*
* Description : Charger Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Charger_Current_Set(void)
{
uint16_t Charger_CurADC_Value = 0;
/* ͨ¹ýÍⲿµç×èADC1ÖµÉèÖóäµçµçÁ÷Öµ */
Charger_CurADC_Value = ADC_Chn_Value(ADC_CH1);
/* Setting CV */
REG_CHG2 = 0x00; //0:4.20V;1:4.35V
/* Setting CHG Current */
REG_CHG1 = 0x03; //000:100mA;001:200mA;010:250mA;011:300mA;100:350mA;101:400mA;110:450mA;111:500mA
}
#endif
/*
*******************************************************************************
* uint8_t Charger_NTC_Control(uint8_t Charge_sta)
*
* Description : Charger NTC Control
* NTC Ö§³Ö 103 ºÍ 104 µç×裬NTC ζȼì²âÓÉÈí¼þͨ¹ý ADC ²É¼¯ NTC Òý½Åµçѹ¡£
* Èç¹ûÖ§³ÖµçÁ¿¼ÆÎ¶ȼì²âÏßÐÔ»¯£¬Ö§³ÖµçÁ¿¼Æ·½°¸ 103 µÄ NTC ÐèÒª²¢Ò»¸ö 8.2k
* µç×裨20uA µçÁ÷£¬103 NTC ÐèÒª´®Áª 10k µç×裩£¬104 µÄ NTC ²¢Áª 82k µç×è¡£
* ÔÚʹÄܳäµçǰ£¬Èí¼þÏȼì²âNTC ζȣ¬Èç¹û NTC ¸¡¿Õ£¬ÆÁ±Î NTC ¹¦ÄÜ£¬
* ²¢Ëø¶¨£»Èç¹û NTC ÏÂÀ­µ½ 0V£¬¹Ø±Õ³äµçºÍ·Åµç¡£NTC ±£»¤ºó£¬Èí¼þ¹Ø±Õ³äµç£¬
* ζȻָ´Õý³£²¢³ÖÐø 100ms£¬ÔÙ¼ÌÐø³äµç¡£
*
* Arguments : NTC_Protect_Type_e NTC_Type:Shield ¡¢JEITA or IEC;Charge_sta:Charge or not
* Returns :NTC_Flag (0:Shield; 1:JEITA; 2:IEC)
* Notes : NONE
*
*******************************************************************************
*/
#if NTC_ENABLE
uint8_t PMU_NTC_Control(void)
{
uint16_t NTC_Adc = 0;
uint8_t nNTC_Pro_Flag = 0;
static bit NTC_Low_Pro_Flag;
static bit NTC_High_Pro_Flag;
#if NTC_ENABLE
NTC_Adc = ADC_NTC_Value();
#endif
if(NTC_Adc >= 2000) ////ÆÁ±ÎNTC¹¦ÄÜ£¬NTC¸¡¿Õ£¬ÆÁ±Î NTC ¹¦ÄÜ£¬²¢Ëø¶¨¡£
{
return 0;
}
if(NTC_Adc <= T_0C && NTC_Adc > T_45C) //NTCÕý³£
{
if(NTC_Low_Pro_Flag)
{
if( NTC_Adc < T_3C )
{
NTC_Low_Pro_Flag = 0;
nNTC_Pro_Flag = 0;
}
else
{
nNTC_Pro_Flag = 1;
}
}
if(NTC_High_Pro_Flag)
{
if( NTC_Adc > T_42C )
{
NTC_High_Pro_Flag = 0;
nNTC_Pro_Flag = 0;
}
else
{
nNTC_Pro_Flag = 1;
}
}
}
else //Òì³£²»³äµç
{
if(NTC_Adc > T_0C)
{
NTC_Low_Pro_Flag = 1;
}
else
if(NTC_Adc < T_45C)
{
NTC_High_Pro_Flag = 1;
}
nNTC_Pro_Flag = 1;
}
return nNTC_Pro_Flag;
}
#endif
/*
*******************************************************************************
* void Charger_Handler(void)
*
* Description : Charger Handle. ---- ³äµç¹ý³Ì³ýÁ˸ù¾Ý NTC ¶¯Ì¬µ÷½Ú³äµçµçÁ÷ºÍ½ØÖ¹µçѹÍ⣬ÆäËûÓÉÓ²¼þ¿ØÖÆ¡£³äµç¹ý³Ì
·¢ÉúÒì³££¬Ó²¼þ½øÐÐÏàÓ¦´¦Àí£¬²¢·¢Ëͱê־룬Èí¼þ¿ÉÒÔ½øÐÐÏàÓ¦´¦Àí¡£
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
/*
1¡¢³äµç³¬Ê±£º³äµç³¬Ê±ºó£¬Èí¼þ¹Ø±Õ³äµçʹÄÜ£¬µÈ´ýVIN°Î³ö¡£
*/
void Charger_Handler(void)
{
if( !(CHIP_STA4 & 0x80) ) //δ¼ì²âµ½Power good,Ôò¹Ø±ÕChargerʹÄܺ󷵻ء£
{
CHG_CTL &= ~0x01; //Disable Charger
IRQ_FLAG9 = 0x10; //δ³äµç£¬ÐèÇåCharg complete interruptÖжÏ
Charger_Done = 0;
return;
}
/*¸÷Ïî±£»¤¶¼ÎÞÐèÈí¼þ´¦Àí£¬Ö»´¦Àí³äµç³¬Ê±£¬³¬Ê±ºóÐèÒªµÈVBUSÖØÐ²å°Îºó²ÅÖØÐ¿ªÊ¼ChargerÁ÷³Ì¡£*/
if ( IRQ_FLAG9 & 0x0C ) //³äµç³¬Ê±,Tricle charg and Fast charge timeout
{
CHG_CTL &= ~0x01; //Disable Charger
if ( IRQ_FLAG10 & 0xC0 ) //Plugin\Plugout interrupt
{
IRQ_FLAG9 = 0x0C;
IRQ_FLAG10 = 0xC0; //Clear Plugin\Plugout interrupt
}
return;
}
else /*³äµçδ³¬Ê±£¬´æÔÚPlugÔòÇåPlugin\Plugout int*/
{
if( IRQ_FLAG10 & 0xC0 )
{
IRQ_FLAG10 = 0xC0; //Clear Plugin\Plugout interrupt
}
}
#if NTC_ENABLE
/*NTC Handle*/ //ʹÄÜChargerǰÏȼì²âNTCζȣ¬Òì³£¾Í²»¿ª³äµç¡£(CHIP_STA4 & 0x80):PG
if( PMU_NTC_Control() ) //NTC±£»¤£¬²»³äµç¡£
{
CHG_CTL &= ~0x01; //Disable Charger.
return;
}
#endif
if( IRQ_FLAG9 & 0x10 ) //Charg complete interrupt
{
#if ADC_ENABLE
#ifdef _DEBUG_CHARGER
printf("Chg Done\r\n");
#endif
if( Vbat_Adc < BAT_RECHARG )
{
//CHG_CTL |= 0x01; //Enable Charger
IRQ_FLAG9 = 0x10;
#ifdef _DEBUG_CHARGER
printf("En Chg\r\n");
#endif
}
else
{
CHG_CTL &= ~0x01; //Disable Charger
#ifdef _DEBUG_CHARGER
printf("Dis Chg\r\n");
#endif
}
Charger_Done = 1;
#endif
}
else
{
CHG_CTL |= 0x01; //Enable Charger
Charger_Done = 0;
}
}
#endif