mcu_ab568x/userboot240328/app/platform/bsp/bsp_charge.c
2025-05-30 18:03:10 +08:00

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