FreeCalypso > hg > fc-magnetite
comparison src/cs/drivers/drv_app/fchg/fchg_process.c @ 647:94cb5e76b3b5
FCHG: fixed corner case bug of missing discharge init on charger unplug
also turn on LEDC during i2v calibration
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 16 Apr 2020 16:48:08 +0000 |
parents | 92dbfa906f66 |
children |
comparison
equal
deleted
inserted
replaced
646:8c74c177e914 | 647:94cb5e76b3b5 |
---|---|
67 /* | 67 /* |
68 * Set the CHDISPA bit and start the zero calibration routine | 68 * Set the CHDISPA bit and start the zero calibration routine |
69 * of the I to V converter | 69 * of the I to V converter |
70 */ | 70 */ |
71 ABB_Write_Register_on_page(PAGE0, BCICTL2, 0x0010); | 71 ABB_Write_Register_on_page(PAGE0, BCICTL2, 0x0010); |
72 ABB_Write_Register_on_page(PAGE0, BCICTL2, 0x0019); | 72 ABB_Write_Register_on_page(PAGE0, BCICTL2, 0x0019 | LEDC); |
73 } | 73 } |
74 | 74 |
75 static void start_ci_charging(void) | 75 static void start_ci_charging(void) |
76 { | 76 { |
77 rvf_send_trace("Start CI charging", 17, NULL_PARAM, | 77 rvf_send_trace("Start CI charging", 17, NULL_PARAM, |
296 rvf_send_trace("i2v offset (MADC code) ", 23, | 296 rvf_send_trace("i2v offset (MADC code) ", 23, |
297 pwr_ctrl->i2v_offset, | 297 pwr_ctrl->i2v_offset, |
298 RV_TRACE_LEVEL_DEBUG_LOW, FCHG_USE_ID); | 298 RV_TRACE_LEVEL_DEBUG_LOW, FCHG_USE_ID); |
299 if (!(msg->data[9] & CHGPRES)) { | 299 if (!(msg->data[9] & CHGPRES)) { |
300 pwr_ctrl->state = FCHG_STATE_NO_EXT_PWR; | 300 pwr_ctrl->state = FCHG_STATE_NO_EXT_PWR; |
301 pwr_init_discharge(); | |
301 return; | 302 return; |
302 } | 303 } |
303 start_ci_charging(); | 304 start_ci_charging(); |
304 return; | 305 return; |
305 case FCHG_STATE_CI_CHARGING: | 306 case FCHG_STATE_CI_CHARGING: |
306 ci_progress_trace(msg->data[2]); | 307 ci_progress_trace(msg->data[2]); |
307 if (!(msg->data[9] & CHGPRES)) { | 308 if (!(msg->data[9] & CHGPRES)) { |
308 ABB_Write_Register_on_page(PAGE0, BCICTL2, 0); | 309 ABB_Write_Register_on_page(PAGE0, BCICTL2, 0); |
309 pwr_ctrl->state = FCHG_STATE_NO_EXT_PWR; | 310 pwr_ctrl->state = FCHG_STATE_NO_EXT_PWR; |
311 pwr_init_discharge(); | |
310 return; | 312 return; |
311 } | 313 } |
312 if (charging_time_limit_check()) | 314 if (charging_time_limit_check()) |
313 return; | 315 return; |
314 if (pwr_ctrl->batt_mv >= pwr_ctrl->config.ci2cv_thresh) | 316 if (pwr_ctrl->batt_mv >= pwr_ctrl->config.ci2cv_thresh) |
316 return; | 318 return; |
317 case FCHG_STATE_CV_CHARGING: | 319 case FCHG_STATE_CV_CHARGING: |
318 if (!(msg->data[9] & CHGPRES)) { | 320 if (!(msg->data[9] & CHGPRES)) { |
319 ABB_Write_Register_on_page(PAGE0, BCICTL2, 0); | 321 ABB_Write_Register_on_page(PAGE0, BCICTL2, 0); |
320 pwr_ctrl->state = FCHG_STATE_NO_EXT_PWR; | 322 pwr_ctrl->state = FCHG_STATE_NO_EXT_PWR; |
323 pwr_init_discharge(); | |
321 return; | 324 return; |
322 } | 325 } |
323 if (cv_ichg_process(msg->data[2])) | 326 if (cv_ichg_process(msg->data[2])) |
324 return; | 327 return; |
325 if (overvoltage_end_charge_check()) | 328 if (overvoltage_end_charge_check()) |