/* ****************************************************************************** * * @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 ); }