SY8835_For_Demo_Ourself/UsrSrc/pmu/pmu.c

360 lines
8.2 KiB
C
Raw 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 pmu.c
* @brief pmu module
* @ic sy8835
*
* @version 1.0
* @date 2024/11/01 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2024/11/01 Alex Xu build this file
******************************************************************************
*/
/*_____ I N C L U D E S ____________________________________________________*/
#include "pmu.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
g_PMU_Info pmu_Info; //pmu状态信息
#if 0
g_PMU_Sys_Cfg pmu_Sys_Cfg;
g_PMU_CHG_Cfg pmu_Chg_Cfg;
g_PMU_Vox_Cfg pmu_Vox_Cfg;
#endif
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void pmu_Init( void )
*
* Description : pmu Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void pmu_Init(void)
{
//I2cSfr_Write(IRQ_EN0, 0x04);
//I2cSfr_Write(IRQ_EN1, 0x00);
/*1、配置HALL、KEY。*/
I2cSfr_Write(I2CR_RST_CFG, 0x08); //HALL开盒退出ShipMode功能KEY长按复位VDD若处于ShipMode模式则退出ShipMode模式
/*2、PMU中断边沿使能配置*/
ExtSfr_Write(IRQ_PIN_CFG, 0x0A); //配置PMU中断为下降沿触发。
I2cSfr_Write( VDPM_VDD_CHG_EN, VDD_BYPASS );
}
/*
*******************************************************************************
* HAL_StatusTypeDef Get_PMU_Info( g_PMU_Info *n_pmu_Info )
*
* Description : Get pmu Information
*
* Arguments : g_PMU_Info *n_pmu_Info
* Returns : HAL_StatusTypeDef
* Notes : NONE
*
*******************************************************************************
*/
HAL_StatusTypeDef Get_PMU_Info( g_PMU_Info *n_pmu_Info )
{
#if 0
if( n_pmu_Info == NULL )
{
return HAL_ERROR;
}
#endif
n_pmu_Info->pmu_Fault_STA0 = I2cSfr_Read( FAULT_STA0 );
n_pmu_Info->pmu_Fault_STA1 = I2cSfr_Read( FAULT_STA1 );
n_pmu_Info->pmu_Fault_STA2 = I2cSfr_Read( FAULT_STA2 );
n_pmu_Info->pmu_Chip_STA = I2cSfr_Read( CHIP_STA );
n_pmu_Info->pmu_VOX_STA = I2cSfr_Read( VOX_STA );
return HAL_OK;
}
#if 0
/*
*******************************************************************************
* HAL_StatusTypeDef Set_PMU_Config( g_PMU_Sys_Cfg *n_PMU_Sys_Cfg )
*
* Description : Set pmu Config
*
* Arguments : g_PMU_Sys_Cfg *n_PMU_Sys_Cfg
* Returns : HAL_StatusTypeDef
* Notes : NONE
*
*******************************************************************************
*/
HAL_StatusTypeDef Set_PMU_Sys_Config( g_PMU_Sys_Cfg *n_PMU_Sys_Cfg )
{
#if 0
if( n_PMU_Sys_Cfg == NULL )
{
return HAL_ERROR;
}
#endif
I2cSfr_Write( I2CR_RST_CFG, n_PMU_Sys_Cfg->pmu_Rst_Cfg );
I2cSfr_Write( POWER_CTRL_CMD, n_PMU_Sys_Cfg->pmu_PWR_Ctrl_Cmd );
I2cSfr_Write( CHG_VPMID_SET, n_PMU_Sys_Cfg->pmu_VPMID_Cfg );
I2cSfr_Write( IRQ_EN0, n_PMU_Sys_Cfg->pmu_IRQ_En0 );
I2cSfr_Write( IRQ_EN1, n_PMU_Sys_Cfg->pmu_IRQ_En1 );
I2cSfr_Write( XSEN_CTRL, n_PMU_Sys_Cfg->pmu_Xsen_Ctrl );
I2cSfr_Write( POWER_LED_CTRL0, n_PMU_Sys_Cfg->pmu_LED_Ctrl0 );
I2cSfr_Write( WDT1_CFG, n_PMU_Sys_Cfg->pmu_WDT1_Cfg );
I2cSfr_Write( WDT1_RST, n_PMU_Sys_Cfg->pmu_WDT1_Rst );
return HAL_OK;
}
/*
*******************************************************************************
* HAL_StatusTypeDef Set_PMU_CHG_Config( g_PMU_CHG_Cfg *n_PMU_CHG_Cfg )
*
* Description : Set pmu CHG Config
*
* Arguments : g_PMU_CHG_Cfg *n_PMU_CHG_Cfg
* Returns : HAL_StatusTypeDef
* Notes : NONE
*
*******************************************************************************
*/
HAL_StatusTypeDef Set_PMU_CHG_Config( g_PMU_CHG_Cfg *n_PMU_CHG_Cfg )
{
#if 0
if( n_PMU_CHG_Cfg == NULL )
{
return HAL_ERROR;
}
#endif
I2cSfr_Write( VDPM_VDD_CHG_EN, n_PMU_CHG_Cfg->pmu_VDPM_VDD_CHG_En );
I2cSfr_Write( CHG_VFLOAT_SET, n_PMU_CHG_Cfg->pmu_Chg_VFLOAT_Cfg );
I2cSfr_Write( CHG_ICC_SET, n_PMU_CHG_Cfg->pmu_Chg_ICC_Cfg );
I2cSfr_Write( CHG_ITC_ITERM_SET, n_PMU_CHG_Cfg->pmu_Chg_ITC_Iterm_Cfg );
return HAL_OK;
}
#endif
/*
*******************************************************************************
* void Set_PMU_CHG(uint8_t Chg_En)
*
* Description : Set PMU CHG Enable
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Set_PMU_CHG(uint8_t Chg_En)
{
uint8_t I2cSfr_Temp = 0;
I2cSfr_Temp = I2cSfr_Read( VDPM_VDD_CHG_EN );
if( Chg_En )
{
I2cSfr_Temp |= BUCK_CHG_EN;
}
else
{
I2cSfr_Temp &= ~BUCK_CHG_EN;
}
I2cSfr_Write( VDPM_VDD_CHG_EN, I2cSfr_Temp );
}
/*
*******************************************************************************
* void Set_PMU_Boost(uint8_t Boost_En)
*
* Description : Set PMU Boost Enable
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Set_PMU_Boost(uint8_t Boost_En)
{
uint8_t I2cSfr_Temp = 0;
I2cSfr_Temp = I2cSfr_Read( BST_COMM_EN );
if( Boost_En )
{
I2cSfr_Temp |= BST_COMM_EN_Boost_En;
}
else
{
I2cSfr_Temp &= ~BST_COMM_EN_Boost_En;
}
I2cSfr_Write( BST_COMM_EN, I2cSfr_Temp );
}
/*
*******************************************************************************
* void Set_PMU_Boost_Vout(uint8_t Boost_Vout)
*
* Description : Set PMU Boost Vout Value
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Set_PMU_Boost_Vout(uint8_t Boost_Vout)
{
uint8_t I2cSfr_Temp = 0;
I2cSfr_Temp = I2cSfr_Read( CHG_VPMID_SET ) & 0xC0;
I2cSfr_Write( CHG_VPMID_SET, I2cSfr_Temp | Boost_Vout );
}
/*
*******************************************************************************
* HAL_StatusTypeDef Set_PMU_VOX_Config( g_PMU_Vox_Cfg *n_PMU_Vox_Cfg )
*
* Description : Set pmu Vox Config
*
* Arguments : g_PMU_Vox_Cfg *n_PMU_Vox_Cfg
* Returns : HAL_StatusTypeDef
* Notes : NONE
*
*******************************************************************************
*/
HAL_StatusTypeDef Set_PMU_VOX_Config( g_PMU_Vox_Cfg *n_PMU_Vox_Cfg )
{
#if 0
if( n_PMU_Vox_Cfg == NULL )
{
return HAL_ERROR;
}
#endif
I2cSfr_Write( BST_COMM_EN, n_PMU_Vox_Cfg->pmu_BST_COMM_En );
I2cSfr_Write( VOX_CFG, n_PMU_Vox_Cfg->pmu_VOX_Cfg );
return HAL_OK;
}
/*
*******************************************************************************
* void Set_PMU_Enter_ShipMode(void)
*
* Description : Set PMU Enter ShipMode
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Set_PMU_Enter_ShipMode(void)
{
I2cSfr_Write( POWER_CTRL_CMD, POWER_CTRL_CMD_ENTER_SHIPMODE );
}
/*
*******************************************************************************
* void Set_PMU_En_ReChg(void)
*
* Description : Set PMU ReCharg.
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Set_PMU_En_ReChg(void)
{
I2cSfr_Write( POWER_CTRL_CMD, POWER_CTRL_CMD_RECHG_ENABLE );
}
/*
*******************************************************************************
* void Set_PMU_Rst(void)
*
* Description : Set PMU Reset.
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Set_PMU_Rst(void)
{
I2cSfr_Write( POWER_CTRL_CMD, POWER_CTRL_CMD_RST_VDD );
}