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 */
19typedef 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
29
30// TODO comments
56
57// TODO comments
64
65// TODO comments
76
77// TODO comments
78typedef enum {
79 LOW_PWR = 0x01,
80 HIGH_RES = 0x10
81} pwr_t;
82
83// TODO comments
94
113
114typedef 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 */
151} dcdcFreq_t;
152
153typedef struct {
154 // CLOCK Register Configurations
158
163
164 // GAIN Register Configurations
168
169 // CFG Register Configurations
174
175 // DCDC_CTRL Register Configurations
178
179 // Driver Level Configurations
183
185
186typedef 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
200
201
202 // processed data
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;
214
215// Startup functions
216uint8_t wakeup_isoADC(isoADCConfig_t const* cfg_ptr, isoADCData_t* data_ptr);
217
218// SPI level transactions
219uint8_t read_isoADC_register(uint8_t address, uint8_t* response_buffer);
220uint8_t write_isoADC_register(uint8_t address, uint8_t* response_buffer, uint8_t const* write_bits);
221
222// Read Registers
223uint8_t read_isoADC_ID(void);
224uint8_t read_isoADC_ADCs(isoADCConfig_t const* cfg_ptr, isoADCData_t* data_ptr);
225uint8_t read_isoADC_status(isoADCData_t* data_ptr);
226
227// CRC
228uint16_t calculate_crc(uint8_t *data, uint8_t length);
229uint8_t write_isoADC_reg_with_crc(uint8_t address, uint8_t* response_buffer, uint8_t const* write_bits);
230uint8_t read_isoADC_reg_with_crc(uint8_t address, uint8_t* response_buffer);
231
232// Conversion
233bool convert_raw_to_actual(isoADCConfig_t *config, isoADCData_t *data_ptr);
234
235extern SPI_HandleTypeDef* isoADC_SPI_ptr_g;
236extern GPIO_TypeDef* isoADC_SPI_cs_port_ptr_g;
237extern uint16_t isoADC_SPI_cs_pin_g;
238extern TIM_HandleTypeDef* isoADC_PWM_ptr_g;
239extern uint32_t isoADC_PWM_ch_g;
240
243
244
245#endif
: Header for main.c file. This file contains the common defines of the application.
uint16_t calculate_crc(uint8_t *data, uint8_t length)
Definition isoADC.c:391
bool convert_raw_to_actual(isoADCConfig_t *config, isoADCData_t *data_ptr)
Definition isoADC.c:441
uint8_t write_isoADC_register(uint8_t address, uint8_t *response_buffer, uint8_t const *write_bits)
isoADCCommandCode_e
Definition isoADC.h:19
@ STANDBY_CMD
Definition isoADC.h:22
@ WREG_CMD
Definition isoADC.h:27
@ WAKEUP_CMD
Definition isoADC.h:23
@ UNLOCK_CMD
Definition isoADC.h:25
@ RREG_CMD
Definition isoADC.h:26
@ RESET_CMD
Definition isoADC.h:21
@ LOCK_CMD
Definition isoADC.h:24
@ NULL_CMD
Definition isoADC.h:20
chGain_e
Definition isoADC.h:84
@ GAIN_16
Definition isoADC.h:89
@ GAIN_2
Definition isoADC.h:86
@ GAIN_4
Definition isoADC.h:87
@ GAIN_8
Definition isoADC.h:88
@ GAIN_128
Definition isoADC.h:92
@ GAIN_1
Definition isoADC.h:85
@ GAIN_64
Definition isoADC.h:91
@ GAIN_32
Definition isoADC.h:90
uint8_t read_isoADC_ID(void)
Definition isoADC.c:273
uint8_t read_isoADC_status(isoADCData_t *data_ptr)
Definition isoADC.c:375
uint8_t read_isoADC_register(uint8_t address, uint8_t *response_buffer)
TIM_HandleTypeDef * isoADC_PWM_ptr_g
Definition main.c:134
GPIO_TypeDef * isoADC_SPI_cs_port_ptr_g
Definition main.c:132
uint8_t read_isoADC_ADCs(isoADCConfig_t const *cfg_ptr, isoADCData_t *data_ptr)
Definition isoADC.c:291
osr_t
Definition isoADC.h:66
@ OSR_1024
Definition isoADC.h:70
@ OSR_128
Definition isoADC.h:67
@ OSR_4096
Definition isoADC.h:72
@ OSR_8192
Definition isoADC.h:73
@ OSR_256
Definition isoADC.h:68
@ OSR_512
Definition isoADC.h:69
@ OSR_16384
Definition isoADC.h:74
@ OSR_2048
Definition isoADC.h:71
isoADCConfig_t gIsoADCConfig
Definition isoADC.c:29
isoADCData_t gIsoADCData
Definition isoADC.c:92
SPI_HandleTypeDef * isoADC_SPI_ptr_g
Definition main.c:131
pwr_t
Definition isoADC.h:78
@ LOW_PWR
Definition isoADC.h:79
@ HIGH_RES
Definition isoADC.h:80
gcDelay_e
Definition isoADC.h:95
@ GC_DLY_64
Definition isoADC.h:101
@ GC_DLY_8
Definition isoADC.h:98
@ GC_DLY_65535
Definition isoADC.h:111
@ GC_DLY_128
Definition isoADC.h:102
@ GC_DLY_32768
Definition isoADC.h:110
@ GC_DLY_32
Definition isoADC.h:100
@ GC_DLY_4096
Definition isoADC.h:107
@ GC_DLY_16384
Definition isoADC.h:109
@ GC_DLY_256
Definition isoADC.h:103
@ GC_DLY_8192
Definition isoADC.h:108
@ GC_DLY_16
Definition isoADC.h:99
@ GC_DLY_4
Definition isoADC.h:97
@ GC_DLY_512
Definition isoADC.h:104
@ GC_DLY_1024
Definition isoADC.h:105
@ GC_DLY_2048
Definition isoADC.h:106
@ GC_DLY_2
Definition isoADC.h:96
clkDivider_e
Definition isoADC.h:58
@ DIV_2
Definition isoADC.h:59
@ DIV_12
Definition isoADC.h:62
@ DIV_8
Definition isoADC.h:61
@ DIV_4
Definition isoADC.h:60
dcdcFreq_t
Definition isoADC.h:114
@ DCDC_FREQ_5
Definition isoADC.h:140
@ DCDC_FREQ_6
Definition isoADC.h:141
@ DCDC_FREQ_10
Definition isoADC.h:145
@ DCDC_FREQ_15
Definition isoADC.h:150
@ DCDC_FREQ_9
Definition isoADC.h:144
@ DCDC_FREQ_4
Definition isoADC.h:139
@ DCDC_FREQ_0
Definition isoADC.h:135
@ DCDC_FREQ_2
Definition isoADC.h:137
@ DCDC_FREQ_7
Definition isoADC.h:142
@ DCDC_FREQ_13
Definition isoADC.h:148
@ DCDC_FREQ_3
Definition isoADC.h:138
@ DCDC_FREQ_14
Definition isoADC.h:149
@ DCDC_FREQ_11
Definition isoADC.h:146
@ DCDC_FREQ_12
Definition isoADC.h:147
@ DCDC_FREQ_8
Definition isoADC.h:143
@ DCDC_FREQ_1
Definition isoADC.h:136
uint16_t isoADC_SPI_cs_pin_g
Definition main.c:133
uint8_t read_isoADC_reg_with_crc(uint8_t address, uint8_t *response_buffer)
uint8_t write_isoADC_reg_with_crc(uint8_t address, uint8_t *response_buffer, uint8_t const *write_bits)
uint32_t isoADC_PWM_ch_g
Definition main.c:135
isoADCRegisterAddr_e
Definition isoADC.h:31
@ CH1_CFG_ADDRESS
Definition isoADC.h:43
@ CH0_GCAL_MSB_ADDRESS
Definition isoADC.h:41
@ MODE_ADDRESS
Definition isoADC.h:34
@ CH1_GCAL_MSB_ADDRESS
Definition isoADC.h:46
@ ID_ADDRESS
Definition isoADC.h:32
@ CLOCK_ADDRESS
Definition isoADC.h:35
@ CH1_OCAL_MSB_ADDRESS
Definition isoADC.h:44
@ REGMAP_CRC_ADDRESS
Definition isoADC.h:54
@ CH0_GCAL_LSB_ADDRESS
Definition isoADC.h:42
@ CH0_CFG_ADDRESS
Definition isoADC.h:38
@ CH0_OCAL_LSB_ADDRESS
Definition isoADC.h:40
@ CH1_OCAL_LSB_ADDRESS
Definition isoADC.h:45
@ CH2_GCAL_MSB_ADDRESS
Definition isoADC.h:51
@ CH1_GCAL_LSB_ADDRESS
Definition isoADC.h:47
@ CH2_CFG_ADDRESS
Definition isoADC.h:48
@ CH2_GCAL_LSB_ADDRESS
Definition isoADC.h:52
@ CH0_OCAL_MSB_ADDRESS
Definition isoADC.h:39
@ DCDC_CTRL_ADDRESS
Definition isoADC.h:53
@ GAIN_ADDRESS
Definition isoADC.h:36
@ CH2_OCAL_MSB_ADDRESS
Definition isoADC.h:49
@ CH2_OCAL_LSB_ADDRESS
Definition isoADC.h:50
@ CFG_ADDRESS
Definition isoADC.h:37
@ STATUS_ADDRESS
Definition isoADC.h:33
uint8_t wakeup_isoADC(isoADCConfig_t const *cfg_ptr, isoADCData_t *data_ptr)
Definition isoADC.c:118
Definition isoADC.h:153
float shunt_resistance
Definition isoADC.h:180
osr_t osr
Definition isoADC.h:161
bool turbo_enable
Definition isoADC.h:160
dcdcFreq_t dcdc_freq
Definition isoADC.h:176
float vbus_sense_resistance
Definition isoADC.h:182
chGain_e ch2_gain_enum
Definition isoADC.h:165
pwr_t pwr
Definition isoADC.h:162
bool ch1_enable
Definition isoADC.h:156
gcDelay_e gc_delay_enum
Definition isoADC.h:172
float vbus_resistance
Definition isoADC.h:181
bool gpo_enable
Definition isoADC.h:170
bool gc_enable
Definition isoADC.h:173
bool gpo_data
Definition isoADC.h:171
chGain_e ch1_gain_enum
Definition isoADC.h:166
bool dcdc_enable
Definition isoADC.h:177
bool ch0_enable
Definition isoADC.h:157
clkDivider_e clk_div
Definition isoADC.h:159
bool ch2_enable
Definition isoADC.h:155
chGain_e ch0_gain_enum
Definition isoADC.h:167
Definition isoADC.h:186
float shunt_current
Definition isoADC.h:204
float raw_shunt_voltage
Definition isoADC.h:188
float raw_thermistor_voltage
Definition isoADC.h:194
bool abort_fault
Definition isoADC.h:212
float adjusted_shunt_voltage
Definition isoADC.h:206
bool sec_fail
Definition isoADC.h:211
bool fuse_fail
Definition isoADC.h:210
float bus_voltage
Definition isoADC.h:203
float shunt_temp
Definition isoADC.h:205
bool reset
Definition isoADC.h:209
float raw_scaled_bus_voltage
Definition isoADC.h:191
bool ch2_drdy
Definition isoADC.h:199
bool ch0_drdy
Definition isoADC.h:197
bool ch1_drdy
Definition isoADC.h:198