90 lines
2.3 KiB
C
90 lines
2.3 KiB
C
#include "include.h"
|
|
|
|
#if CHARGE_EN
|
|
|
|
#define TRACE_EN 0
|
|
|
|
#if TRACE_EN
|
|
#define TRACE(...) printf(__VA_ARGS__)
|
|
#else
|
|
#define TRACE(...)
|
|
#endif
|
|
|
|
#define DC_IN() ((RTCCON >> 20) & 0x01) //VUSB Online state: 0->not online, 1->online
|
|
|
|
static charge_cfg_t charge_cfg;
|
|
|
|
#if TRACE_EN
|
|
AT(.com_rodata.tkey)
|
|
const char charge_on_str[] = "Charge on\n";
|
|
AT(.com_rodata.tkey)
|
|
const char charge_off_str[] = "Charge off: %d\n";
|
|
#endif
|
|
|
|
AT(.text.charge_com.sta)
|
|
void bsp_charge_sta(u8 sta)
|
|
{
|
|
if (sta == 1) {
|
|
//充电开启
|
|
sys_cb.charge_sta = 1;
|
|
sys_cb.charge_bled_flag = 0;
|
|
TRACE(charge_on_str);
|
|
} else {
|
|
//充电关闭
|
|
TRACE(charge_off_str, sta);
|
|
sys_cb.charge_sta = 0;
|
|
sys_cb.charge_bled_flag = 0;
|
|
if (sta == 2) {
|
|
sys_cb.charge_sta = 2;
|
|
}
|
|
}
|
|
}
|
|
|
|
void bsp_charge_off(void)
|
|
{
|
|
if (charge_cfg.chag_sta > CHAG_STA_OFF) {
|
|
charge_stop(0);
|
|
}
|
|
}
|
|
|
|
AT(.text.charge_com.det)
|
|
u8 charge_dc_detect(void)
|
|
{
|
|
if (!xcfg_cb.charge_en) {
|
|
return 0;
|
|
}
|
|
return (RTCCON >> 20) & 0x01;
|
|
}
|
|
|
|
void bsp_charge_set_stop_time(u16 stop_time)
|
|
{
|
|
charge_cfg.stop_time = stop_time;
|
|
}
|
|
|
|
void bsp_charge_init(void)
|
|
{
|
|
charge_cfg_t *p = &charge_cfg;
|
|
memset(p, 0, sizeof(charge_cfg_t));
|
|
|
|
if (xcfg_cb.charge_en) {
|
|
p->trick_curr_en = CHARGE_TRICK_EN;
|
|
p->dcin_reset = CHARGE_DC_RESET;
|
|
p->buck_mode_en = BUCK_MODE_EN*xcfg_cb.buck_mode_en;
|
|
p->trick_stop_volt = CHARGE_TRICK_STOP_VOLT;
|
|
p->stop_volt = CHARGE_STOP_VOLT;
|
|
p->follow_volt = CHARGE_VOLT_FOLLOW;
|
|
p->const_curr = CHARGE_CONSTANT_CURR;
|
|
p->trick_curr = CHARGE_TRICKLE_CURR;
|
|
p->stop_curr = CHARGE_STOP_CURR;
|
|
p->stop_curr_thd = 80;
|
|
p->bled_on_pr = 0;
|
|
p->stop_time = 18000; //默认30分钟
|
|
|
|
RTCCON3 &= ~BIT(12); //RTCCON3[12], INBOX Wakeup disable
|
|
RTCCON7 &= ~BIT(6); //PWRUPICH = 20mA
|
|
RTCCON8 |= BIT(4); //inbox voltage selection. 1'b1, 1.7v; 1'b0, 1.1v
|
|
charge_init(p);
|
|
}
|
|
}
|
|
#endif // CHARGE_EN
|