firmware
IEM Firmware Documentation
Loading...
Searching...
No Matches
isoADC.h
Go to the documentation of this file.
1
6
7
#ifndef __ISOADC_H
8
#define __ISOADC_H
9
10
#include <
main.h
>
11
#include <math.h>
12
#include <stdint.h>
13
14
/* Command Words for the isoADC
15
* 2 bytes each
16
* RREG and WREG must be modified from bit [12:0] before being send to isoADC
17
* Description on page 47
18
*/
19
typedef
enum
{
20
NULL_CMD
= 0x0000,
21
RESET_CMD
= 0x0011,
22
STANDBY_CMD
= 0x0022,
23
WAKEUP_CMD
= 0x0033,
24
LOCK_CMD
= 0x0555,
25
UNLOCK_CMD
= 0x0655,
26
RREG_CMD
= 0xA000,
27
WREG_CMD
= 0x6000
28
}
isoADCCommandCode_e
;
29
30
// TODO comments
31
typedef
enum
{
32
ID_ADDRESS
= 0x00,
33
STATUS_ADDRESS
= 0x01,
34
MODE_ADDRESS
= 0x02,
35
CLOCK_ADDRESS
= 0x03,
36
GAIN_ADDRESS
= 0x04,
37
CFG_ADDRESS
= 0x06,
38
CH0_CFG_ADDRESS
= 0x09,
39
CH0_OCAL_MSB_ADDRESS
= 0x0A,
40
CH0_OCAL_LSB_ADDRESS
= 0x0B,
41
CH0_GCAL_MSB_ADDRESS
= 0x0C,
42
CH0_GCAL_LSB_ADDRESS
= 0x0D,
43
CH1_CFG_ADDRESS
= 0x0E,
44
CH1_OCAL_MSB_ADDRESS
= 0x0F,
45
CH1_OCAL_LSB_ADDRESS
= 0x10,
46
CH1_GCAL_MSB_ADDRESS
= 0x11,
47
CH1_GCAL_LSB_ADDRESS
= 0x12,
48
CH2_CFG_ADDRESS
= 0x13,
49
CH2_OCAL_MSB_ADDRESS
= 0x14,
50
CH2_OCAL_LSB_ADDRESS
= 0x15,
51
CH2_GCAL_MSB_ADDRESS
= 0x16,
52
CH2_GCAL_LSB_ADDRESS
= 0x17,
53
DCDC_CTRL_ADDRESS
= 0x31,
54
REGMAP_CRC_ADDRESS
= 0x3E
55
}
isoADCRegisterAddr_e
;
56
57
// TODO comments
58
typedef
enum
{
59
DIV_2
,
60
DIV_4
,
61
DIV_8
,
62
DIV_12
63
}
clkDivider_e
;
64
65
// TODO comments
66
typedef
enum
{
67
OSR_128
,
68
OSR_256
,
69
OSR_512
,
70
OSR_1024
,
71
OSR_2048
,
72
OSR_4096
,
73
OSR_8192
,
74
OSR_16384
75
}
osr_t
;
76
77
// TODO comments
78
typedef
enum
{
79
LOW_PWR
= 0x01,
80
HIGH_RES
= 0x10
81
}
pwr_t
;
82
83
// TODO comments
84
typedef
enum
{
85
GAIN_1
,
86
GAIN_2
,
87
GAIN_4
,
88
GAIN_8
,
89
GAIN_16
,
90
GAIN_32
,
91
GAIN_64
,
92
GAIN_128
93
}
chGain_e
;
94
95
typedef
enum
{
96
GC_DLY_2
,
97
GC_DLY_4
,
98
GC_DLY_8
,
99
GC_DLY_16
,
100
GC_DLY_32
,
101
GC_DLY_64
,
102
GC_DLY_128
,
103
GC_DLY_256
,
104
GC_DLY_512
,
105
GC_DLY_1024
,
106
GC_DLY_2048
,
107
GC_DLY_4096
,
108
GC_DLY_8192
,
109
GC_DLY_16384
,
110
GC_DLY_32768
,
111
GC_DLY_65535
112
}
gcDelay_e
;
113
114
typedef
enum
{
115
/* DC/DC frequency range selection
116
Selects the range of the modulator clock frequency, based on the frequency at the CLKIN
117
pin and clock divider ratio.
118
0000b = 3.76 MHz to 4.10 MHz
119
0001b = 3.52 MHz to 3.84 MHz
120
0010b = 3.30 MHz to 3.59 MHz
121
0011b = 3.09 MHz to 3.36 MHz
122
0100b = 2.89 MHz to 3.15 MHz
123
0101b = 2.71 MHz to 2.95 MHz
124
0110b = 2.53 MHz to 2.76 MHz
125
0111b = 2.37 MHz to 2.59 MHz
126
1000b = 2.22 MHz to 2.42 MHz
127
1001b = 2.08 MHz to 2.27 MHz
128
1010b = 1.95 MHz to 2.12 MHz
129
1011b = 1.82 MHz to 1.99 MHz
130
1100b = 1.71 MHz to 1.86 MHz
131
1101b = 1.60 MHz to 1.74 MHz
132
1110b = 1.50 MHz to 1.63 MHz
133
1111b = 1.40 MHz to 1.53 MHz
134
*/
135
DCDC_FREQ_0
,
136
DCDC_FREQ_1
,
137
DCDC_FREQ_2
,
138
DCDC_FREQ_3
,
139
DCDC_FREQ_4
,
140
DCDC_FREQ_5
,
141
DCDC_FREQ_6
,
142
DCDC_FREQ_7
,
143
DCDC_FREQ_8
,
144
DCDC_FREQ_9
,
145
DCDC_FREQ_10
,
146
DCDC_FREQ_11
,
147
DCDC_FREQ_12
,
148
DCDC_FREQ_13
,
149
DCDC_FREQ_14
,
150
DCDC_FREQ_15
151
}
dcdcFreq_t
;
152
153
typedef
struct
{
154
// CLOCK Register Configurations
155
bool
ch2_enable
;
156
bool
ch1_enable
;
157
bool
ch0_enable
;
158
159
clkDivider_e
clk_div
;
160
bool
turbo_enable
;
161
osr_t
osr
;
162
pwr_t
pwr
;
163
164
// GAIN Register Configurations
165
chGain_e
ch2_gain_enum
;
166
chGain_e
ch1_gain_enum
;
167
chGain_e
ch0_gain_enum
;
168
169
// CFG Register Configurations
170
bool
gpo_enable
;
171
bool
gpo_data
;
172
gcDelay_e
gc_delay_enum
;
173
bool
gc_enable
;
174
175
// DCDC_CTRL Register Configurations
176
dcdcFreq_t
dcdc_freq
;
177
bool
dcdc_enable
;
178
179
// Driver Level Configurations
180
float
shunt_resistance
;
181
float
vbus_resistance
;
182
float
vbus_sense_resistance
;
183
184
}
isoADCConfig_t
;
185
186
typedef
struct
{
187
// channel 0 - Shunt Resistor
188
float
raw_shunt_voltage
;
// raw data processed through SPI
189
190
// channel 1 - Pack Voltage Divider
191
float
raw_scaled_bus_voltage
;
// raw data processed through SPI
192
193
// channel 2 - Shunt Thermistor
194
float
raw_thermistor_voltage
;
// raw data processed through SPI
195
196
// Used to know if the channel was read by the last operation
197
bool
ch0_drdy
;
198
bool
ch1_drdy
;
199
bool
ch2_drdy
;
200
201
202
// processed data
203
float
bus_voltage
;
204
float
shunt_current
;
205
float
shunt_temp
;
// calculated shunt resistor temperature
206
float
adjusted_shunt_voltage
;
// adjusted based on shunt resistor temperature
207
208
// chip error management
209
bool
reset
;
210
bool
fuse_fail
;
211
bool
sec_fail
;
212
bool
abort_fault
;
213
}
isoADCData_t
;
214
215
// Startup functions
216
uint8_t
wakeup_isoADC
(
isoADCConfig_t
const
* cfg_ptr,
isoADCData_t
* data_ptr);
217
218
// SPI level transactions
219
uint8_t
read_isoADC_register
(uint8_t address, uint8_t* response_buffer);
220
uint8_t
write_isoADC_register
(uint8_t address, uint8_t* response_buffer, uint8_t
const
* write_bits);
221
222
// Read Registers
223
uint8_t
read_isoADC_ID
(
void
);
224
uint8_t
read_isoADC_ADCs
(
isoADCConfig_t
const
* cfg_ptr,
isoADCData_t
* data_ptr);
225
uint8_t
read_isoADC_status
(
isoADCData_t
* data_ptr);
226
227
// CRC
228
uint16_t
calculate_crc
(uint8_t *data, uint8_t length);
229
uint8_t
write_isoADC_reg_with_crc
(uint8_t address, uint8_t* response_buffer, uint8_t
const
* write_bits);
230
uint8_t
read_isoADC_reg_with_crc
(uint8_t address, uint8_t* response_buffer);
231
232
// Conversion
233
bool
convert_raw_to_actual
(
isoADCConfig_t
*config,
isoADCData_t
*data_ptr);
234
235
extern
SPI_HandleTypeDef*
isoADC_SPI_ptr_g
;
236
extern
GPIO_TypeDef*
isoADC_SPI_cs_port_ptr_g
;
237
extern
uint16_t
isoADC_SPI_cs_pin_g
;
238
extern
TIM_HandleTypeDef*
isoADC_PWM_ptr_g
;
239
extern
uint32_t
isoADC_PWM_ch_g
;
240
241
extern
isoADCConfig_t
gIsoADCConfig
;
242
extern
isoADCData_t
gIsoADCData
;
243
244
245
#endif
main.h
: Header for main.c file. This file contains the common defines of the application.
calculate_crc
uint16_t calculate_crc(uint8_t *data, uint8_t length)
Definition
isoADC.c:391
convert_raw_to_actual
bool convert_raw_to_actual(isoADCConfig_t *config, isoADCData_t *data_ptr)
Definition
isoADC.c:441
write_isoADC_register
uint8_t write_isoADC_register(uint8_t address, uint8_t *response_buffer, uint8_t const *write_bits)
isoADCCommandCode_e
isoADCCommandCode_e
Definition
isoADC.h:19
STANDBY_CMD
@ STANDBY_CMD
Definition
isoADC.h:22
WREG_CMD
@ WREG_CMD
Definition
isoADC.h:27
WAKEUP_CMD
@ WAKEUP_CMD
Definition
isoADC.h:23
UNLOCK_CMD
@ UNLOCK_CMD
Definition
isoADC.h:25
RREG_CMD
@ RREG_CMD
Definition
isoADC.h:26
RESET_CMD
@ RESET_CMD
Definition
isoADC.h:21
LOCK_CMD
@ LOCK_CMD
Definition
isoADC.h:24
NULL_CMD
@ NULL_CMD
Definition
isoADC.h:20
chGain_e
chGain_e
Definition
isoADC.h:84
GAIN_16
@ GAIN_16
Definition
isoADC.h:89
GAIN_2
@ GAIN_2
Definition
isoADC.h:86
GAIN_4
@ GAIN_4
Definition
isoADC.h:87
GAIN_8
@ GAIN_8
Definition
isoADC.h:88
GAIN_128
@ GAIN_128
Definition
isoADC.h:92
GAIN_1
@ GAIN_1
Definition
isoADC.h:85
GAIN_64
@ GAIN_64
Definition
isoADC.h:91
GAIN_32
@ GAIN_32
Definition
isoADC.h:90
read_isoADC_ID
uint8_t read_isoADC_ID(void)
Definition
isoADC.c:273
read_isoADC_status
uint8_t read_isoADC_status(isoADCData_t *data_ptr)
Definition
isoADC.c:375
read_isoADC_register
uint8_t read_isoADC_register(uint8_t address, uint8_t *response_buffer)
isoADC_PWM_ptr_g
TIM_HandleTypeDef * isoADC_PWM_ptr_g
Definition
main.c:134
isoADC_SPI_cs_port_ptr_g
GPIO_TypeDef * isoADC_SPI_cs_port_ptr_g
Definition
main.c:132
read_isoADC_ADCs
uint8_t read_isoADC_ADCs(isoADCConfig_t const *cfg_ptr, isoADCData_t *data_ptr)
Definition
isoADC.c:291
osr_t
osr_t
Definition
isoADC.h:66
OSR_1024
@ OSR_1024
Definition
isoADC.h:70
OSR_128
@ OSR_128
Definition
isoADC.h:67
OSR_4096
@ OSR_4096
Definition
isoADC.h:72
OSR_8192
@ OSR_8192
Definition
isoADC.h:73
OSR_256
@ OSR_256
Definition
isoADC.h:68
OSR_512
@ OSR_512
Definition
isoADC.h:69
OSR_16384
@ OSR_16384
Definition
isoADC.h:74
OSR_2048
@ OSR_2048
Definition
isoADC.h:71
gIsoADCConfig
isoADCConfig_t gIsoADCConfig
Definition
isoADC.c:29
gIsoADCData
isoADCData_t gIsoADCData
Definition
isoADC.c:92
isoADC_SPI_ptr_g
SPI_HandleTypeDef * isoADC_SPI_ptr_g
Definition
main.c:131
pwr_t
pwr_t
Definition
isoADC.h:78
LOW_PWR
@ LOW_PWR
Definition
isoADC.h:79
HIGH_RES
@ HIGH_RES
Definition
isoADC.h:80
gcDelay_e
gcDelay_e
Definition
isoADC.h:95
GC_DLY_64
@ GC_DLY_64
Definition
isoADC.h:101
GC_DLY_8
@ GC_DLY_8
Definition
isoADC.h:98
GC_DLY_65535
@ GC_DLY_65535
Definition
isoADC.h:111
GC_DLY_128
@ GC_DLY_128
Definition
isoADC.h:102
GC_DLY_32768
@ GC_DLY_32768
Definition
isoADC.h:110
GC_DLY_32
@ GC_DLY_32
Definition
isoADC.h:100
GC_DLY_4096
@ GC_DLY_4096
Definition
isoADC.h:107
GC_DLY_16384
@ GC_DLY_16384
Definition
isoADC.h:109
GC_DLY_256
@ GC_DLY_256
Definition
isoADC.h:103
GC_DLY_8192
@ GC_DLY_8192
Definition
isoADC.h:108
GC_DLY_16
@ GC_DLY_16
Definition
isoADC.h:99
GC_DLY_4
@ GC_DLY_4
Definition
isoADC.h:97
GC_DLY_512
@ GC_DLY_512
Definition
isoADC.h:104
GC_DLY_1024
@ GC_DLY_1024
Definition
isoADC.h:105
GC_DLY_2048
@ GC_DLY_2048
Definition
isoADC.h:106
GC_DLY_2
@ GC_DLY_2
Definition
isoADC.h:96
clkDivider_e
clkDivider_e
Definition
isoADC.h:58
DIV_2
@ DIV_2
Definition
isoADC.h:59
DIV_12
@ DIV_12
Definition
isoADC.h:62
DIV_8
@ DIV_8
Definition
isoADC.h:61
DIV_4
@ DIV_4
Definition
isoADC.h:60
dcdcFreq_t
dcdcFreq_t
Definition
isoADC.h:114
DCDC_FREQ_5
@ DCDC_FREQ_5
Definition
isoADC.h:140
DCDC_FREQ_6
@ DCDC_FREQ_6
Definition
isoADC.h:141
DCDC_FREQ_10
@ DCDC_FREQ_10
Definition
isoADC.h:145
DCDC_FREQ_15
@ DCDC_FREQ_15
Definition
isoADC.h:150
DCDC_FREQ_9
@ DCDC_FREQ_9
Definition
isoADC.h:144
DCDC_FREQ_4
@ DCDC_FREQ_4
Definition
isoADC.h:139
DCDC_FREQ_0
@ DCDC_FREQ_0
Definition
isoADC.h:135
DCDC_FREQ_2
@ DCDC_FREQ_2
Definition
isoADC.h:137
DCDC_FREQ_7
@ DCDC_FREQ_7
Definition
isoADC.h:142
DCDC_FREQ_13
@ DCDC_FREQ_13
Definition
isoADC.h:148
DCDC_FREQ_3
@ DCDC_FREQ_3
Definition
isoADC.h:138
DCDC_FREQ_14
@ DCDC_FREQ_14
Definition
isoADC.h:149
DCDC_FREQ_11
@ DCDC_FREQ_11
Definition
isoADC.h:146
DCDC_FREQ_12
@ DCDC_FREQ_12
Definition
isoADC.h:147
DCDC_FREQ_8
@ DCDC_FREQ_8
Definition
isoADC.h:143
DCDC_FREQ_1
@ DCDC_FREQ_1
Definition
isoADC.h:136
isoADC_SPI_cs_pin_g
uint16_t isoADC_SPI_cs_pin_g
Definition
main.c:133
read_isoADC_reg_with_crc
uint8_t read_isoADC_reg_with_crc(uint8_t address, uint8_t *response_buffer)
write_isoADC_reg_with_crc
uint8_t write_isoADC_reg_with_crc(uint8_t address, uint8_t *response_buffer, uint8_t const *write_bits)
isoADC_PWM_ch_g
uint32_t isoADC_PWM_ch_g
Definition
main.c:135
isoADCRegisterAddr_e
isoADCRegisterAddr_e
Definition
isoADC.h:31
CH1_CFG_ADDRESS
@ CH1_CFG_ADDRESS
Definition
isoADC.h:43
CH0_GCAL_MSB_ADDRESS
@ CH0_GCAL_MSB_ADDRESS
Definition
isoADC.h:41
MODE_ADDRESS
@ MODE_ADDRESS
Definition
isoADC.h:34
CH1_GCAL_MSB_ADDRESS
@ CH1_GCAL_MSB_ADDRESS
Definition
isoADC.h:46
ID_ADDRESS
@ ID_ADDRESS
Definition
isoADC.h:32
CLOCK_ADDRESS
@ CLOCK_ADDRESS
Definition
isoADC.h:35
CH1_OCAL_MSB_ADDRESS
@ CH1_OCAL_MSB_ADDRESS
Definition
isoADC.h:44
REGMAP_CRC_ADDRESS
@ REGMAP_CRC_ADDRESS
Definition
isoADC.h:54
CH0_GCAL_LSB_ADDRESS
@ CH0_GCAL_LSB_ADDRESS
Definition
isoADC.h:42
CH0_CFG_ADDRESS
@ CH0_CFG_ADDRESS
Definition
isoADC.h:38
CH0_OCAL_LSB_ADDRESS
@ CH0_OCAL_LSB_ADDRESS
Definition
isoADC.h:40
CH1_OCAL_LSB_ADDRESS
@ CH1_OCAL_LSB_ADDRESS
Definition
isoADC.h:45
CH2_GCAL_MSB_ADDRESS
@ CH2_GCAL_MSB_ADDRESS
Definition
isoADC.h:51
CH1_GCAL_LSB_ADDRESS
@ CH1_GCAL_LSB_ADDRESS
Definition
isoADC.h:47
CH2_CFG_ADDRESS
@ CH2_CFG_ADDRESS
Definition
isoADC.h:48
CH2_GCAL_LSB_ADDRESS
@ CH2_GCAL_LSB_ADDRESS
Definition
isoADC.h:52
CH0_OCAL_MSB_ADDRESS
@ CH0_OCAL_MSB_ADDRESS
Definition
isoADC.h:39
DCDC_CTRL_ADDRESS
@ DCDC_CTRL_ADDRESS
Definition
isoADC.h:53
GAIN_ADDRESS
@ GAIN_ADDRESS
Definition
isoADC.h:36
CH2_OCAL_MSB_ADDRESS
@ CH2_OCAL_MSB_ADDRESS
Definition
isoADC.h:49
CH2_OCAL_LSB_ADDRESS
@ CH2_OCAL_LSB_ADDRESS
Definition
isoADC.h:50
CFG_ADDRESS
@ CFG_ADDRESS
Definition
isoADC.h:37
STATUS_ADDRESS
@ STATUS_ADDRESS
Definition
isoADC.h:33
wakeup_isoADC
uint8_t wakeup_isoADC(isoADCConfig_t const *cfg_ptr, isoADCData_t *data_ptr)
Definition
isoADC.c:118
isoADCConfig_t
Definition
isoADC.h:153
isoADCConfig_t::shunt_resistance
float shunt_resistance
Definition
isoADC.h:180
isoADCConfig_t::osr
osr_t osr
Definition
isoADC.h:161
isoADCConfig_t::turbo_enable
bool turbo_enable
Definition
isoADC.h:160
isoADCConfig_t::dcdc_freq
dcdcFreq_t dcdc_freq
Definition
isoADC.h:176
isoADCConfig_t::vbus_sense_resistance
float vbus_sense_resistance
Definition
isoADC.h:182
isoADCConfig_t::ch2_gain_enum
chGain_e ch2_gain_enum
Definition
isoADC.h:165
isoADCConfig_t::pwr
pwr_t pwr
Definition
isoADC.h:162
isoADCConfig_t::ch1_enable
bool ch1_enable
Definition
isoADC.h:156
isoADCConfig_t::gc_delay_enum
gcDelay_e gc_delay_enum
Definition
isoADC.h:172
isoADCConfig_t::vbus_resistance
float vbus_resistance
Definition
isoADC.h:181
isoADCConfig_t::gpo_enable
bool gpo_enable
Definition
isoADC.h:170
isoADCConfig_t::gc_enable
bool gc_enable
Definition
isoADC.h:173
isoADCConfig_t::gpo_data
bool gpo_data
Definition
isoADC.h:171
isoADCConfig_t::ch1_gain_enum
chGain_e ch1_gain_enum
Definition
isoADC.h:166
isoADCConfig_t::dcdc_enable
bool dcdc_enable
Definition
isoADC.h:177
isoADCConfig_t::ch0_enable
bool ch0_enable
Definition
isoADC.h:157
isoADCConfig_t::clk_div
clkDivider_e clk_div
Definition
isoADC.h:159
isoADCConfig_t::ch2_enable
bool ch2_enable
Definition
isoADC.h:155
isoADCConfig_t::ch0_gain_enum
chGain_e ch0_gain_enum
Definition
isoADC.h:167
isoADCData_t
Definition
isoADC.h:186
isoADCData_t::shunt_current
float shunt_current
Definition
isoADC.h:204
isoADCData_t::raw_shunt_voltage
float raw_shunt_voltage
Definition
isoADC.h:188
isoADCData_t::raw_thermistor_voltage
float raw_thermistor_voltage
Definition
isoADC.h:194
isoADCData_t::abort_fault
bool abort_fault
Definition
isoADC.h:212
isoADCData_t::adjusted_shunt_voltage
float adjusted_shunt_voltage
Definition
isoADC.h:206
isoADCData_t::sec_fail
bool sec_fail
Definition
isoADC.h:211
isoADCData_t::fuse_fail
bool fuse_fail
Definition
isoADC.h:210
isoADCData_t::bus_voltage
float bus_voltage
Definition
isoADC.h:203
isoADCData_t::shunt_temp
float shunt_temp
Definition
isoADC.h:205
isoADCData_t::reset
bool reset
Definition
isoADC.h:209
isoADCData_t::raw_scaled_bus_voltage
float raw_scaled_bus_voltage
Definition
isoADC.h:191
isoADCData_t::ch2_drdy
bool ch2_drdy
Definition
isoADC.h:199
isoADCData_t::ch0_drdy
bool ch0_drdy
Definition
isoADC.h:197
isoADCData_t::ch1_drdy
bool ch1_drdy
Definition
isoADC.h:198
ecu
bms
Core
Inc
isoADC.h
Generated by
1.14.0