#include "PanSeries.h" #include "pan_power.h" power_param_t m_power_param; static uint8_t config_flag = 0; bool PW_ParamIsHas(void) { return m_power_param.buck_out_trim; } void PW_ParamsSet(OTP_STRUCT_T *p_otp) { m_power_param.buck_out_trim = p_otp->m.buck_out_trim; m_power_param.hp_ldo_trim = p_otp->m.hp_ldo_trim; m_power_param.lph_ldo_vref_trim = p_otp->m_v2.lph_ldo_vref_trim; m_power_param.lpl_ldo_trim = p_otp->m.lph_ldo_trim; } void PW_AutoOptimizeParams(int16_t temp) { uint32_t val = 0; if(temp <= 0) { if(config_flag == 1) return; config_flag = 1; //buck out(DCDC):default:8; FT+2 uint32_t tmp = ANA->LP_BUCK_3V; tmp &= ~(0xFul<<2); tmp |= (((m_power_param.buck_out_trim >> 1) + 2) << 2); ANA->LP_BUCK_3V = tmp; //LPLDOH vref; FT+2 val = (m_power_param.lph_ldo_vref_trim + 2); if(val > 7) val = 7; tmp = ANA->LP_LP_LDO_3V; tmp &= ~(0x7u << 21); tmp |= (val << 21); ANA->LP_LP_LDO_3V = tmp; //LPLDOL trim; FT+1 tmp = ANA->LP_LP_LDO_3V; tmp &= ~(0xFu << 1); tmp |= ((m_power_param.lpl_ldo_trim + 1) << 1); ANA->LP_LP_LDO_3V = tmp; //HPLDO(DVDD) default:8; FT tmp = ANA->LP_HP_LDO; tmp &= ~(0xFul <<3); tmp |= ((m_power_param.hp_ldo_trim)<<3); ANA->LP_HP_LDO = tmp; } else if(temp >= 40) { if(config_flag == 2) return; config_flag = 2; //buck out(DCDC):default:8; FT+2 uint32_t tmp = ANA->LP_BUCK_3V; tmp &= ~(0xFul<<2); tmp |= (((m_power_param.buck_out_trim >> 1) + 2) << 2); ANA->LP_BUCK_3V = tmp; //LPLDOH vref; FT val = (m_power_param.lph_ldo_vref_trim); if(val > 7) val = 7; tmp = ANA->LP_LP_LDO_3V; tmp &= ~(0x7u << 21); tmp |= (val << 21); ANA->LP_LP_LDO_3V = tmp; //LPLDOL trim; FT tmp = ANA->LP_LP_LDO_3V; tmp &= ~(0xFu << 1); tmp |= ((m_power_param.lpl_ldo_trim) << 1); ANA->LP_LP_LDO_3V = tmp; //HPLDO(DVDD) default:8; FT tmp = ANA->LP_HP_LDO; tmp &= ~(0xFul <<3); tmp |= ((m_power_param.hp_ldo_trim)<<3); ANA->LP_HP_LDO = tmp; } else{ if(config_flag == 0) return; config_flag = 0; //buck out(DCDC):default:8; FT-2 uint32_t tmp = ANA->LP_BUCK_3V; tmp &= ~(0xFul<<2); tmp |= (((m_power_param.buck_out_trim >> 1) - 2) << 2); ANA->LP_BUCK_3V = tmp; //LPLDOH vref; FT tmp = ANA->LP_LP_LDO_3V; tmp &= ~(0x7u << 21); tmp |= ((m_power_param.lph_ldo_vref_trim) << 21); ANA->LP_LP_LDO_3V = tmp; //LPLDOL trim; FT tmp = ANA->LP_LP_LDO_3V; tmp &= ~(0xFu << 1); tmp |= ((m_power_param.lpl_ldo_trim) << 1); ANA->LP_LP_LDO_3V = tmp; //HPLDO(DVDD) default:8; FT-1 tmp = ANA->LP_HP_LDO; tmp &= ~(0xFul <<3); tmp |= ((m_power_param.hp_ldo_trim - 1)<<3); ANA->LP_HP_LDO = tmp; } }