360 lines
8.2 KiB
C
360 lines
8.2 KiB
C
/*
|
||
******************************************************************************
|
||
*
|
||
* @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 );
|
||
}
|
||
|