mirror of
https://github.com/rvtr/ctr_mcu.git
synced 2025-06-18 16:45:33 -04:00

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@613 013db118-44a6-b54f-8bf7-843cb86687b1
223 lines
6.9 KiB
C
223 lines
6.9 KiB
C
#ifndef __PM__
|
|
#define __PM__
|
|
/*
|
|
$Id$
|
|
*/
|
|
|
|
#define IIC_SLA_PMIC 0x84
|
|
#define IIC_SLA_BT_GAUGE 0x6C
|
|
|
|
#define VCOM_DEFAULT_T 92
|
|
#define VCOM_DEFAULT_B 95
|
|
|
|
|
|
|
|
#define BATT_TH_LO 10
|
|
#define BATT_TH_EMPTY 5
|
|
|
|
// 電圧レジスタと直接比較できる用にオフセット
|
|
#define V_BT_4000MV (u16)( 4000 * 12.8 ) // 電圧読み出し失敗用 4000mV設定
|
|
#define V_TH_30 (u16)( 3300 * 12.8 ) // 30%
|
|
#define V_TH_LO (u16)( 3200 * 12.8 ) // 10%
|
|
#define V_TH_EMPTY (u16)( 3150 * 12.8 ) // 5%
|
|
#define V_TH_ZERO (u16)( 3100 * 12.8 ) // 0%
|
|
#define V_TH_FORCE_OFF (u16)( 2900 * 12.8 ) // 2.9V 最終強制断
|
|
|
|
|
|
//=========================================================
|
|
#ifdef _WIN32
|
|
#define LED_CHARGE mcuRegP[ _P2_4 ]
|
|
#else
|
|
#define LED_CHARGE P2.4
|
|
#endif
|
|
|
|
|
|
//=========================================================
|
|
enum PMIC_REG_ADRS
|
|
{
|
|
PM_REG_ADRS_VER = 0x00, // verinfo など
|
|
PM_REG_ADRS_VDD_SYS, // システムが使用する電源
|
|
PM_REG_ADRS_VDD_LCD, // 液晶電源
|
|
PM_REG_ADRS_CONT, // /RESET1, LoadSwitch
|
|
PM_REG_ADRS_BL, // バックライト on/off
|
|
PM_REG_ADRS_POW_SAVE, // 省電力設定
|
|
PM_REG_ADRS_POW_DAC1,
|
|
PM_REG_ADRS_POW_DAC2
|
|
};
|
|
|
|
enum BT_GAUGE_REG_ADRS
|
|
{
|
|
BT_GAUGE_REG_VCELL = 0x02, // それぞれ16ビットのため
|
|
BT_GAUGE_REG_SOC = 0x04,
|
|
BT_GAUGE_REG_MODE = 0x06,
|
|
BT_GAUGE_REG_VERSION = 0x08,
|
|
BT_GAUGE_REG_OCV = 0x0E,
|
|
BT_GAUGE_REG_RCOMP = 0x0C,
|
|
BT_GAUGE_REG_LOCK = 0x3E,
|
|
BT_GAUGE_REG_BT_PARAM = 0x40,
|
|
BT_GAUGE_REG_COMMAND = 0xFE,
|
|
BT_GAUGE_REG_RCOMP_EXT = 0x80,
|
|
};
|
|
|
|
|
|
typedef enum BT_VENDER
|
|
{
|
|
BT_VENDER_MAXELL = 0, // ショート
|
|
BT_VENDER_1, // 120
|
|
BT_VENDER_2, // 360
|
|
BT_VENDER_3, // 750
|
|
BT_VENDER_4, // 1.3k
|
|
BT_VENDER_PANA = 5, // 2.7k
|
|
BT_VENDER_6, // 8.2k
|
|
BT_VENDER_OPEN = 7, // open
|
|
BT_VENDER_NOT_CHECKED = 0xFF,
|
|
}BT_VENDER;
|
|
|
|
|
|
|
|
enum NTR_PM_BT_STATUS{
|
|
NTR_PM_BT_ENOUGH,
|
|
NTR_PM_BT_EMPTY,
|
|
NTR_PM_BT_NOT_INITIALIZED = 0xFF
|
|
};
|
|
|
|
|
|
|
|
//=========================================================
|
|
// CODEC上のPMIC互換レジスタ
|
|
#define CODEC_REG_PM 0x10
|
|
#define CODEC_REG_BL 0x11
|
|
#define CODEC_REG_BT 0x12
|
|
//#define CODEC_REG_VOL 0x13 // ...都合により、adc.hで定義
|
|
|
|
// TWLがSPIでPMICに投げたコマンド
|
|
#define REG_BIT_TWL_REQ_OFF_REQ ( 1 << 6 )
|
|
#define REG_BIT_TWL_REQ_RST_REQ ( 1 << 0 )
|
|
#define REG_BIT_TWL_REQ_BL ( 3 << 2 )
|
|
|
|
|
|
|
|
// 0x03 pw cnt3
|
|
#define PM_REG_BIT_LDSW ( 1 << 0 )
|
|
#define PM_REG_BIT_nRST1 ( 1 << 1 )
|
|
|
|
// 0x01 pw cnt1
|
|
#define PM_REG_BIT_VDD_CTR 0x0F
|
|
#define PM_REG_BIT_VDD50A ( 1 << 4 )
|
|
|
|
// 0x02 pw cnt2
|
|
#define PM_REG_BIT_VDDLCD_CGS 0x07
|
|
#define PM_REG_BIT_VDDLCD_AMO 0x05
|
|
#define PM_REG_BIT_LCD_VCS ( 0x01 << 4 )
|
|
#define PM_REG_BIT_LCD_TCOM ( 0x01 << 3 )
|
|
|
|
// 0x04 bl cnt
|
|
#define PM_REG_BIT_BL_U 0x01
|
|
#define PM_REG_BIT_BL_L 0x02
|
|
|
|
|
|
// 0x05 pow save
|
|
#define PM_REG_BIT_VDD1P_1R15 bits8(0,0,0,0, 0,0,0,0)
|
|
#define PM_REG_BIT_VDD1P_1R05 bits8(0,0,0,0, 1,0,0,0)
|
|
#define PM_REG_BIT_VDD1P_1R00 bits8(0,0,0,1, 0,0,0,0)
|
|
#define PM_REG_BIT_VDD1P_0R95 bits8(0,0,0,1, 1,0,0,0)
|
|
#define PM_REG_BIT_VDD1P_0R90 bits8(0,0,1,0, 0,0,0,0)
|
|
#define PM_REG_BIT_VDD_AUTO bits8(0,0,0,0, 0,1,1,1)
|
|
#define PM_REG_BIT_VDD_PWM bits8(0,0,0,0, 0,0,0,0)
|
|
|
|
|
|
#define DELAY_PM_TW_PWUP 16 + 2
|
|
#define DELAY_PM_TSS_50B_AND_TCOM 17 + 1
|
|
#define DELAY_PM_5V_TO_TCOM 17 + 1
|
|
#define DELAY_PM_TCOM_TO_VCS 3
|
|
#define DELAY_PM_VCS_TO_BL ( 17 + 5 )
|
|
#define DELAY_PM_LCD_OFF ( 50 + 1 )
|
|
|
|
|
|
//=========================================================
|
|
extern u8 raw_adc_temperature;
|
|
extern BT_VENDER battery_manufacturer;
|
|
extern bit bt_force_update;
|
|
|
|
extern u8 pmic_version;
|
|
extern u8 mgic_version[];
|
|
|
|
extern u8 pm_reg_bit_vddlcd; // アモルファス対応(電源シーケンスが違う)
|
|
|
|
extern u8 pmreg_v_core; // SoCのコア電圧設定。SNAKE(LAGER)で変更があるため。
|
|
|
|
//=========================================================
|
|
err PM_sys_pow_on( );
|
|
void PM_sys_pow_off( );
|
|
//err PM_bt_auth( );
|
|
void PM_LCD_vcom_set( );
|
|
|
|
err PM_LCD_on( );
|
|
void PM_LCD_off( );
|
|
err PM_BL_set( u8 );
|
|
|
|
void BT_chk();
|
|
void BT_get_left();
|
|
void pm_chk_adapter();
|
|
|
|
void codec_reg_init();
|
|
|
|
void set_vdd_voltages( enum family_ family );
|
|
|
|
void reset_release();
|
|
|
|
task_status_immed tski_BT_temp_update( );
|
|
task_status_immed tski_vcom_set( );
|
|
task_status_immed tski_PM_LCD_on();
|
|
task_status_immed tski_PM_LCD_off();
|
|
task_status_immed tski_PM_BL_set();
|
|
|
|
|
|
err send_cmd_pmic( u8 reg, u8 dat );
|
|
u8 read_pmic( u8 reg );
|
|
|
|
|
|
#define PM_Chg_Stop() { BT_TEMP_P = 0; BT_CHG_DISABLE(); LED_CHARGE = 0; bt_authorized = false; }
|
|
// これを呼ぶ前に、現在温度を教えておく必要があります。
|
|
#define PM_reset() ( send_cmd_pmic( PM_REG_ADRS_CONT, 0x00 ) )
|
|
|
|
|
|
//=========================================================
|
|
|
|
|
|
// 元栓 //
|
|
#define PM_LDSW_on() ( send_cmd_pmic( PM_REG_ADRS_CONT, PM_REG_BIT_LDSW ))
|
|
#define PM_LDSW_off() ( send_cmd_pmic( PM_REG_ADRS_CONT, 0 ))
|
|
|
|
|
|
// システム電源 //
|
|
#define PM_VDD_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_SYS, PM_REG_BIT_VDD_CTR ))
|
|
#define PM_VDD50A_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_SYS, ( PM_REG_BIT_VDD_CTR | PM_REG_BIT_VDD50A )))
|
|
#define PM_VDD_off() ( send_cmd_pmic( PM_REG_ADRS_VDD_SYS, 0 ))
|
|
#define PM_off() PM_VDD_off()
|
|
|
|
// CPU電源
|
|
#define PM_VDD_normMode() ( send_cmd_pmic( PM_REG_ADRS_POW_SAVE, pmreg_v_core | PM_REG_BIT_VDD_PWM ))
|
|
#define PM_VDD_ecoMode() ( send_cmd_pmic( PM_REG_ADRS_POW_SAVE, PM_REG_BIT_VDD1P_0R90 | PM_REG_BIT_VDD_AUTO ))
|
|
|
|
// ほか //
|
|
#define PM_reset_neg() ( send_cmd_pmic( PM_REG_ADRS_CONT, ( PM_REG_BIT_LDSW | PM_REG_BIT_nRST1 )))
|
|
// #define PM_reset_ast() // ちゃんと read modify write するようにします
|
|
void PM_reset_ast();
|
|
#define PM_chk_LDSW() ( read_pmic( PM_REG_ADRS_CONT ) & PM_REG_BIT_LDSW ) // 1のとき、元電源on
|
|
|
|
// 液晶系電源 //
|
|
#define PM_VDDLCD_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, pm_reg_bit_vddlcd ))
|
|
#define PM_TCOM_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, ( pm_reg_bit_vddlcd | PM_REG_BIT_LCD_TCOM )))
|
|
#define PM_VCS_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, ( pm_reg_bit_vddlcd | PM_REG_BIT_LCD_VCS | PM_REG_BIT_LCD_TCOM )))
|
|
#define PM_TCOM_off() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, ( pm_reg_bit_vddlcd | PM_REG_BIT_LCD_VCS )))
|
|
#define PM_TCOM_VCS_off() PM_VDDLCD_on()
|
|
#define PM_VDDLCD_off() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, 0 ) )
|
|
|
|
#define PM_set_BL( dat ) ( send_cmd_pmic( PM_REG_ADRS_BL, dat ) )
|
|
#define PM_set_adc1( dat ) ( send_cmd_pmic( PM_REG_ADRS_POW_DAC1, dat ) )
|
|
#define PM_set_adc2( dat ) ( send_cmd_pmic( PM_REG_ADRS_POW_DAC2, dat ) )
|
|
|
|
|
|
#endif // __PM__
|