24#define PRODUCT_ID 0xFD
25#define MICROCHIP_ID 0xFE
28#define INT_DIODE_HB 0x00
29#define INT_DIODE_LB 0x29
30#define EXT_DIODE1_HB 0x01
31#define EXT_DIODE1_LB 0x10
32#define EXT_DIODE2_HB 0x23
33#define EXT_DIODE2_LB 0x24
36#define STATUS_REG 0x02
37#define CONFIG_REG 0x03
38#define CONVERT_RATE_REG 0x04
41#define HIGH_LIMIT_REG_INT_DIODE 0x05
42#define LOW_LIMIT_REG_INT_DIODE 0x06
43#define HIGH_LIMIT_REG_EXT_DIODE1_HB 0x07
44#define LOW_LIMIT_REG_EXT_DIODE1_HB 0x08
45#define HIGH_LIMIT_REG_EXT_DIODE1_LB 0x13
46#define LOW_LIMIT_REG_EXT_DIODE1_LB 0x14
47#define HIGH_LIMIT_REG_EXT_DIODE2_HB 0x15
48#define LOW_LIMIT_REG_EXT_DIODE2_HB 0x16
49#define HIGH_LIMIT_REG_EXT_DIODE2_LB 0x17
50#define LOW_LIMIT_REG_EXT_DIODE2_LB 0x18
53#define HIGH_LIMIT_REG_EXT_DIODE3_HB 0x2C
54#define HIGH_LIMIT_REG_EXT_DIODE3_LB 0x2E
55#define LOW_LIMIT_REG_EXT_DIODE3_HB 0x2D
56#define LOW_LIMIT_REG_EXT_DIODE3_LB 0x2F
59#define THERM_LIMIT 0X37
60#define THERM_LIMIT_EXT_DIODE1 0X19
61#define THERM_LIMIT_EXT_DIODE2 0X1A
62#define THERM_LIMIT_EXT_DIODE3 0X30
63#define THERM_LIMIT_INT_DIODE 0X20
64#define THERM_LIMIT_HYSTERESIS 0X21
67#define HIGH_LIMIT_STATUS_REG 0x35
68#define LOW_LIMIT_STATUS_REG 0x36
69#define THERM_LIMIT_STATUS_REG 0x37
72#define BETA_CONFIG_EX1_REG 0x25
73#define BETA_CONFIG_EX2_REG 0x26
76#define FILTER_CTRL_REG 0x40
77#define EXT_DIODE_FAULT 0x1B
78#define CONSECUTIVE_ALRT_REG 0x70
79#define CHANNEL_MASK_REG 0x1F
82#define DEFAULT_HIGH_LIMIT_VALUE 0x55
83#define DEFAULT_LOW_LIMIT_VALUE 0x00
103static const u8 LIMIT_REGS[3][5] = {
126 for (
int i = 0; i < 3; i++) {
148 float offset = (is_extended) ? 64.0 : 0.0;
151 for (
int i = 0; i < 3; i++) {
154 const u8 *regs = LIMIT_REGS[i];
159 float fraction = 0.0;
162 fraction = (raw_lb >> 5) * 0.125;
166 ch->
high_limit = ((float)hb + fraction) - offset;
175 fraction = (raw_lb >> 5) * 0.125;
179 ch->
low_limit = ((float)hb + fraction) - offset;
197 u8 current_bit = (status & 0x04) >> 2;
199 if (current_bit != enable_extended) {
200 if (enable_extended) status |= 0x04;
201 else status &= ~0x04;
222 for (
int i = 0; i < 3; i++) {
225 const u8 *regs = LIMIT_REGS[i];
274 return (status & 0x04) >> 2;
#define LOW_LIMIT_REG_INT_DIODE
#define HIGH_LIMIT_REG_EXT_DIODE2_LB
#define HIGH_LIMIT_REG_EXT_DIODE1_HB
#define HIGH_LIMIT_REG_INT_DIODE
#define THERM_LIMIT_EXT_DIODE2
#define LOW_LIMIT_REG_EXT_DIODE2_HB
#define HIGH_LIMIT_REG_EXT_DIODE2_HB
#define LOW_LIMIT_REG_EXT_DIODE2_LB
#define LOW_LIMIT_REG_EXT_DIODE1_HB
#define THERM_LIMIT_INT_DIODE
#define THERM_LIMIT_EXT_DIODE1
#define LOW_LIMIT_REG_EXT_DIODE1_LB
#define LOW_LIMIT_STATUS_REG
#define HIGH_LIMIT_STATUS_REG
#define HIGH_LIMIT_REG_EXT_DIODE1_LB
EMC1413 Temperature Sensor Driver API definitions. This file provides data structures and APIs for co...
const temp_sensor_api_t emc1413_driver
EMC1413 Driver Instance. Point your generic Temperature Sensor pointer to this structure to use the E...
temp_sensor_status_t emc1413_getTemp(temp_sensor_instance_t *temp)
Get temperature from EMC1413 Temperature Sensor.
temp_sensor_status_t emc1413_checkTempAlert(temp_sensor_instance_t *temp)
Check for temperature alerts from EMC1413 Temperature Sensor.
temp_sensor_status_t emc1413_setTempRange(temp_sensor_instance_t *temp, u8 enable_extended)
Set temperature range for EMC1413 Temperature Sensor.
temp_sensor_status_t emc1413_getTempLimit(temp_sensor_instance_t *temp)
Get temperature limits from EMC1413 Temperature Sensor.
u8 emc1413_checkTempRange(temp_sensor_instance_t *temp)
Check if temperature is within range for EMC1413 Temperature Sensor.
temp_sensor_status_t emc1413_setTempLimit(temp_sensor_instance_t *temp)
Set temperature limits for EMC1413 Temperature Sensor.
temp_sensor_status_t
Temperature Sensor Status List.
@ TEMP_SENSOR_SKIP
Skip the function */.
@ TEMP_SENSOR_HIGH_ALERT
High Temperature Alert */.
@ TEMP_SENSOR_OK
Successful Operation */.
@ TEMP_SENSOR_LOW_ALERT
Low Temperature Alert */.
u8 temp_writeTempReg(temp_sensor_instance_t *temp, const u8 reg, const u8 data)
Write a value to a register in the Temperature Sensor.
u8 temp_readTempReg(temp_sensor_instance_t *temp, const u8 reg)
Read a register from the Temperature Sensor.
u8 encode_temp_limit(float val, u8 is_extended, u8 *out_hb, u8 *out_lb)
Encode temperature limit into high and low byte format.
float calculate_temp_celsius(u8 hb, u8 lb, u8 is_extended)
Calculate temperature in Celsius from high and low byte format.
struct temp_sensor_instance temp_sensor_instance_t
Forward declaration of Temperature Sensor instance.
Temperature Sensor API structure.
Hold temperature data for a single channel/diode.
float high_limit
High Temperature Limit */.
float current_temp
Current Temperature */.
float low_limit
Low Temperature Limit */.
temp_sensor_channelData_t channels[3]
temp_sensor_data_t temp_value
Temperature Sensor data */.