| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #ifndef _ML5238_H__
- #define _ML5238_H__
- #include "bsp/clock.h"
- void ml5238_init(void);
- void ml5238_softreset(void);
- int ml5238_enable_discharger_mosfet(int enable);
- int ml5238_enable_charger_mosfet(int enable);
- int ml5238_short_current_detect(int mode);
- #define SHORT_CURRENT_MODE_DISABLE -1
- #define SHORT_CURRENT_MODE_33_3A 0
- #define SHORT_CURRENT_MODE_66_6A 1
- #define SHORT_CURRENT_MODE_100A 2
- #define SHORT_CURRENT_MODE_133_3A 3
- /* ml5238 will amplify the vmon val by 0.5, so we need
- * multi 2 to the adc value, to get the real vol
- */
- #define cell_real_vol(v) (v * 2)
- #include "ml5238_reg.h"
- int ml5238_write(uint8_t regaddr, uint8_t data);
- /* disable the vmon output the cell voltage */
- #define ML5238_VMON_DISABLE() {ml5238_write(ML5238_VMON, 0x00);};
- /* select one cell (0-14) connect to vmon, so we can measure
- * the cell voltage from vmon pin
- */
- #define ML5238_SELECT_CELL(i) {ml5238_write(ML5238_VMON, i | VMON_OUT);};
- /* IMON output disable */
- #define ML5238_IMON_DISABLE() {ml5238_write(ML5238_IMON, 0x00);};
- /* IMON output 0V, used to cali the GAIN */
- #define ML5238_IMON_OUT_ZERO_10X() {ml5238_write(ML5238_IMON, 0x12);delay_us(1000);};
- #define ML5238_IMON_OUT_ZERO_50X() {ml5238_write(ML5238_IMON, 0x13);delay_us(5000);};
- /* IMON output 2V, used to cali the GAIN */
- #define ML5238_IMON_OUT_V2000_10X() {ml5238_write(ML5238_IMON, 0x14);delay_us(1000);};
- #define ML5238_IMON_OUT_V2000_50X() {ml5238_write(ML5238_IMON, 0x15);delay_us(5000);};
- /* IMON output 100mV, used to cali the GAIN */
- #define ML5238_IMON_OUT_V100_10X() {ml5238_write(ML5238_IMON, 0x1c);delay_us(1000);};
- #define ML5238_IMON_OUT_V100_50X() {ml5238_write(ML5238_IMON, 0x1d);delay_us(5000);};
- /* IMON output real pin's voltage */
- #define ML5238_IMON_OUT_10X() {ml5238_write(ML5238_IMON, 0x10);delay_us(1000);};
- #define ML5238_IMON_OUT_50X() {ml5238_write(ML5238_IMON, 0x11);delay_us(5000);};
- //vim0 == xxx_OUT_ZERO_xxx, vim1 == xxx_OUT_V2000_xxx, vr == xxx_OUT_V100_xxx
- #define ML5238_GAIN(vim0, vim1, vr) ((vim1-vim0)/vr)
- //r_v :real voltage, gain == ML5238_GAIN
- #define ML5238_V_RSENSER(r_v, vim0, gain) ((r_v-vim0)/gain)
- #endif /* _ML5238_H__ */
|