no-OS
adt7420.h
Go to the documentation of this file.
1 /***************************************************************************/
33 #ifndef __ADT7420_H__
34 #define __ADT7420_H__
35 
36 /******************************************************************************/
37 /***************************** Include Files **********************************/
38 /******************************************************************************/
39 
40 #include "no_os_spi.h"
41 #include "no_os_i2c.h"
42 #include "no_os_util.h"
43 #include <stdbool.h>
44 
45 /******************************************************************************/
46 /************************** ADT7420 Definitions *******************************/
47 /******************************************************************************/
48 
49 /* ADT7420 address */
50 #define ADT7420_A0_PIN(x) (((x) & 0x1) << 0) // I2C Serial Bus Address Selection Pin
51 #define ADT7420_A1_PIN(x) (((x) & 0x1) << 1) // I2C Serial Bus Address Selection Pin
52 #define ADT7420_ADDRESS(x,y) (0x48 + ADT7420_A1_PIN(x) + ADT7420_A0_PIN(y))
53 #define ADT7320_L16 NO_OS_BIT(8) //indicator that register is 16-bit
54 #define ADT7320_ADDR_MSK NO_OS_GENMASK(7,0)
55 
56 /* ADT7320 (SPI) registers */
57 #define ADT7320_REG_STATUS 0x00 // Status
58 #define ADT7320_REG_CONFIG 0x01 // Configuration
59 #define ADT7320_REG_TEMP (ADT7320_L16 | 0x02) // Temperature value
60 #define ADT7320_REG_ID 0x03 // ID
61 #define ADT7320_REG_T_CRIT (ADT7320_L16 | 0x04) // Temperature CRIT setpoint (147'C)
62 #define ADT7320_REG_HIST 0x05 // Temperature HYST setpoint (5'C)
63 #define ADT7320_REG_T_HIGH (ADT7320_L16 | 0x06) // Temperature HIGH setpoint (64'C)
64 #define ADT7320_REG_T_LOW (ADT7320_L16 | 0x07) // Temperature LOW setpoint (10'C)
65 
66 /* ADT7320 SPI command byte */
67 #define ADT7320_WRITE_MASK_CMD 0b00111000 // SPI write command
68 #define ADT7320_READ_CMD 0b01000000 // SPI read command
69 
70 /* ADT7420 (I2C) registers */
71 #define ADT7420_REG_TEMP_MSB (ADT7320_L16 |0x00) // Temperature value MSB
72 #define ADT7420_REG_TEMP_LSB 0x01 // Temperature value LSB
73 #define ADT7420_REG_STATUS 0x02 // Status
74 #define ADT7420_REG_CONFIG 0x03 // Configuration
75 #define ADT7420_REG_T_HIGH_MSB (ADT7320_L16 |0x04 )// Temperature HIGH setpoint MSB
76 #define ADT7420_REG_T_HIGH_LSB 0x05 // Temperature HIGH setpoint LSB
77 #define ADT7420_REG_T_LOW_MSB (ADT7320_L16 |0x06) // Temperature LOW setpoint MSB
78 #define ADT7420_REG_T_LOW_LSB 0x07 // Temperature LOW setpoint LSB
79 #define ADT7420_REG_T_CRIT_MSB (ADT7320_L16 |0x08) // Temperature CRIT setpoint MSB
80 #define ADT7420_REG_T_CRIT_LSB 0x09 // Temperature CRIT setpoint LSB
81 #define ADT7420_REG_HIST 0x0A // Temperature HYST setpoint
82 #define ADT7420_REG_ID 0x0B // ID
83 #define ADT7420_REG_RESET 0x2F // Software reset
84 
85 /* ADT7420_REG_STATUS definition */
86 #define ADT7420_STATUS_T_LOW NO_OS_BIT(4)
87 #define ADT7420_STATUS_T_HIGH NO_OS_BIT(5)
88 #define ADT7420_STATUS_T_CRIT NO_OS_BIT(6)
89 #define ADT7420_STATUS_RDY NO_OS_BIT(7)
90 
91 /* ADT7420_REG_CONFIG definition */
92 #define ADT7420_CONFIG_OP_MODE(x) ((x) << 5) & (NO_OS_GENMASK(6,5))
93 #define ADT7420_CONFIG_RESOLUTION NO_OS_BIT(7)
94 
95 /* ADT7420 temperature conversion definitions */
96 #define ADT7420_16BIT_NEG NO_OS_BIT(16)
97 #define ADT7420_16BIT_SIGN 0x8000
98 #define ADT7420_16BIT_DIV 128
99 #define ADT7420_13BIT_NEG NO_OS_BIT(13)
100 #define ADT7420_13BIT_SIGN 0x1000
101 #define ADT7420_13BIT_DIV 16
102 
103 /* ADT7420_CONFIG_OP_MODE(x) options */
104 #define ADT7420_OP_MODE_CONT_CONV 0
105 #define ADT7420_OP_MODE_ONE_SHOT 1
106 #define ADT7420_OP_MODE_1_SPS 2
107 #define ADT7420_OP_MODE_SHUTDOWN 3
108 
109 /* ADT7420 default ID */
110 #define ADT7xxx_ID 0xC
111 
112 #define ADT7420_RESET_DELAY 1
113 
114 
115 /******************************************************************************/
116 /*************************** Types Declarations *******************************/
117 /******************************************************************************/
118 
122 };
123 
125  uint8_t resolution;
127 };
128 
137 };
138 
139 struct adt7420_dev {
140  /* I2C */
142  /* SPI */
144  /* Device Settings */
146  /* Device Settings */
148 
149 };
150 
153  /* I2C */
155  /* SPI */
157  } interface_init;
158  /* Device Settings */
160  /* Device Settings */
162 };
163 
164 extern const struct adt7420_chip_info chip_info[];
165 
166 /******************************************************************************/
167 /************************ Functions Declarations ******************************/
168 /******************************************************************************/
169 
171 int adt7420_reg_read(struct adt7420_dev *dev,
172  uint16_t register_address, uint16_t *data);
173 
174 /* Read-modify-write operation*/
175 int adt7420_reg_update_bits(struct adt7420_dev *dev,
176  uint16_t register_address, uint8_t mask, uint8_t value);
177 
178 /* Write to SPI register */
179 int adt7420_spi_reg_write(struct adt7420_dev *dev, uint16_t register_address,
180  uint32_t data);
181 
182 /* Write to I2C register */
183 int adt7420_i2c_reg_write(struct adt7420_dev *dev, uint16_t register_address,
184  uint32_t data);
185 
186 /*Sets register value*/
187 int adt7420_reg_write(struct adt7420_dev *dev,
188  uint16_t register_address,
189  uint32_t data);
190 
192 int32_t adt7420_init(struct adt7420_dev **device,
194 
195 /* Free the resources allocated by adt7420_init(). */
196 int32_t adt7420_remove(struct adt7420_dev *dev);
197 
200  uint8_t mode);
201 
203 int adt7420_set_resolution(struct adt7420_dev *dev,
204  uint8_t resolution);
205 
207 int32_t adt7420_reset(struct adt7420_dev *dev);
208 
210 float adt7420_get_temperature(struct adt7420_dev *dev);
211 
213 int adt7420_i2c_reg_read(struct adt7420_dev *dev,
214  uint16_t register_address, uint16_t *data);
215 
217 int adt7420_spi_reg_read(struct adt7420_dev *dev,
218  uint16_t register_address, uint16_t *data);
219 
221 bool adt7420_is_spi(struct adt7420_dev *dev);
222 
223 #endif /* __ADT7420_H__ */
adt7420_remove
int32_t adt7420_remove(struct adt7420_dev *dev)
Free the resources allocated by adt7420_init().
Definition: adt7420.c:264
ADT7320_ADDR_MSK
#define ADT7320_ADDR_MSK
Definition: adt7420.h:54
adt7420_init_param::interface_type::i2c_init
struct no_os_i2c_init_param i2c_init
Definition: adt7420.h:154
adt7420_get_temperature
float adt7420_get_temperature(struct adt7420_dev *dev)
Reads the temperature data and converts it to Celsius degrees.
Definition: adt7420.c:370
adt7420_init
int32_t adt7420_init(struct adt7420_dev **device, struct adt7420_init_param init_param)
Initializes the communication peripheral and checks if the device is present.
Definition: adt7420.c:202
ADT7320_REG_CONFIG
#define ADT7320_REG_CONFIG
Definition: adt7420.h:58
ADT7420_13BIT_DIV
#define ADT7420_13BIT_DIV
Definition: adt7420.h:101
no_os_alloc.h
adt7420_remove
int32_t adt7420_remove(struct adt7420_dev *dev)
Free the resources allocated by adt7420_init().
Definition: adt7420.c:264
no_os_i2c_write
int32_t no_os_i2c_write(struct no_os_i2c_desc *desc, uint8_t *data, uint8_t bytes_number, uint8_t stop_bit)
I2C Write data to slave device.
Definition: no_os_i2c.c:159
adt7420_spi_reg_write
int adt7420_spi_reg_write(struct adt7420_dev *dev, uint16_t register_address, uint32_t data)
Write a value of a register via SPI.
Definition: adt7420.c:116
no_os_i2c_init
int32_t no_os_i2c_init(struct no_os_i2c_desc **desc, const struct no_os_i2c_init_param *param)
Initialize the I2C communication peripheral.
Definition: no_os_i2c.c:52
ADT7xxx_ID
#define ADT7xxx_ID
Definition: adt7420.h:110
no_os_spi_write_and_read
int32_t no_os_spi_write_and_read(struct no_os_spi_desc *desc, uint8_t *data, uint16_t bytes_number)
Write and read data to/from SPI.
Definition: no_os_spi.c:159
adt7420_i2c_reg_write
int adt7420_i2c_reg_write(struct adt7420_dev *dev, uint16_t register_address, uint32_t data)
Write a value of a register via I2C.
Definition: adt7420.c:147
no_os_spi.h
Header file of SPI Interface.
ID_ADT7422
@ ID_ADT7422
Definition: adt7420.h:132
ADT7420_RESET_DELAY
#define ADT7420_RESET_DELAY
Definition: adt7420.h:112
adt7420_i2c_reg_write
int adt7420_i2c_reg_write(struct adt7420_dev *dev, uint16_t register_address, uint32_t data)
Write a value of a register via I2C.
Definition: adt7420.c:147
adt7420_i2c_reg_read
int adt7420_i2c_reg_read(struct adt7420_dev *dev, uint16_t register_address, uint16_t *data)
Reads the value of a register I2C interface device.
Definition: adt7420.c:445
no_os_i2c_remove
int32_t no_os_i2c_remove(struct no_os_i2c_desc *desc)
Free the resources allocated by no_os_i2c_init().
Definition: no_os_i2c.c:113
adt7420_get_temperature
float adt7420_get_temperature(struct adt7420_dev *dev)
Reads the temperature data and converts it to Celsius degrees.
Definition: adt7420.c:370
ID_ADT7420
@ ID_ADT7420
Definition: adt7420.h:131
adt7420_init_param::interface_type
Definition: adt7420.h:152
adt7420_dev::resolution_setting
uint8_t resolution_setting
Definition: adt7420.h:147
ID_ADT7410
@ ID_ADT7410
Definition: adt7420.h:130
adt7420_init_param::resolution_setting
uint8_t resolution_setting
Definition: adt7420.h:159
ADT7420_16BIT_NEG
#define ADT7420_16BIT_NEG
Definition: adt7420.h:96
adt7420_reset
int32_t adt7420_reset(struct adt7420_dev *dev)
Resets the SPI or I2C inteface for the ADT7420/ADT7320.
Definition: adt7420.c:340
ID_ADT7310
@ ID_ADT7310
Definition: adt7420.h:133
device
Definition: ad9361_util.h:69
ADT7320_READ_CMD
#define ADT7320_READ_CMD
Definition: adt7420.h:68
adt7420_reg_read
int adt7420_reg_read(struct adt7420_dev *dev, uint16_t register_address, uint16_t *data)
Reads the value of a register.
Definition: adt7420.c:75
adt7420_dev::spi_desc
struct no_os_spi_desc * spi_desc
Definition: adt7420.h:143
ID_ADT7312
@ ID_ADT7312
Definition: adt7420.h:135
chip_info
const struct adt7420_chip_info chip_info[]
Definition: adt7420.c:43
ADT7320_REG_ID
#define ADT7320_REG_ID
Definition: adt7420.h:60
ADT7320_REG_TEMP
#define ADT7320_REG_TEMP
Definition: adt7420.h:59
no_os_mdelay
void no_os_mdelay(uint32_t msecs)
Wait until msecs milliseconds passed.
Definition: aducm3029_delay.c:126
I2C
@ I2C
Definition: adt7420.h:121
ADT7320_L16
#define ADT7320_L16
Definition: adt7420.h:53
I2C
@ I2C
Definition: adxl372.h:317
no_os_error.h
Error codes definition.
ADT7420_16BIT_DIV
#define ADT7420_16BIT_DIV
Definition: adt7420.h:98
chip_info
const struct adt7420_chip_info chip_info[]
Definition: max538x.c:46
SPI
@ SPI
Definition: adt7420.h:120
adt7420_reg_update_bits
int adt7420_reg_update_bits(struct adt7420_dev *dev, uint16_t register_address, uint8_t mask, uint8_t value)
Sets the value of a register SPI/I2C.
Definition: adt7420.c:94
adt7420_is_spi
bool adt7420_is_spi(struct adt7420_dev *dev)
Check if the interface of the selected device is SPI.
Definition: adt7420.c:477
ADT7420_CONFIG_RESOLUTION
#define ADT7420_CONFIG_RESOLUTION
Definition: adt7420.h:93
ADT7420_OP_MODE_SHUTDOWN
#define ADT7420_OP_MODE_SHUTDOWN
Definition: adt7420.h:107
ADT7420_13BIT_NEG
#define ADT7420_13BIT_NEG
Definition: adt7420.h:99
adt7420_reg_update_bits
int adt7420_reg_update_bits(struct adt7420_dev *dev, uint16_t register_address, uint8_t mask, uint8_t value)
Sets the value of a register SPI/I2C.
Definition: adt7420.c:94
adt7420_spi_reg_read
int adt7420_spi_reg_read(struct adt7420_dev *dev, uint16_t register_address, uint16_t *data)
Reads the value of a register SPI interface device.
Definition: adt7420.c:411
adt7420_type
adt7420_type
Definition: adt7420.h:129
adt7420_set_operation_mode
int adt7420_set_operation_mode(struct adt7420_dev *dev, uint8_t mode)
Sets the operational mode for ADT7420/ADT7320.
Definition: adt7420.c:289
no_os_spi_desc
Structure holding SPI descriptor.
Definition: no_os_spi.h:192
ADT7420_REG_ID
#define ADT7420_REG_ID
Definition: adt7420.h:82
adt7420_spi_reg_write
int adt7420_spi_reg_write(struct adt7420_dev *dev, uint16_t register_address, uint32_t data)
Write a value of a register via SPI.
Definition: adt7420.c:116
adt7420_spi_reg_read
int adt7420_spi_reg_read(struct adt7420_dev *dev, uint16_t register_address, uint16_t *data)
Reads the value of a register SPI interface device.
Definition: adt7420.c:411
ID_ADT7320
@ ID_ADT7320
Definition: adt7420.h:136
dev_interface
dev_interface
Definition: adt7420.h:119
ADT7420_REG_CONFIG
#define ADT7420_REG_CONFIG
Definition: adt7420.h:74
adt7420_set_resolution
int adt7420_set_resolution(struct adt7420_dev *dev, uint8_t resolution)
Sets the resolution for ADT7420/ADT7320.
Definition: adt7420.c:315
no_os_i2c_desc
Structure holding I2C address descriptor.
Definition: no_os_i2c.h:101
adt7420_init_param
Definition: adt7420.h:151
no_os_i2c_read
int32_t no_os_i2c_read(struct no_os_i2c_desc *desc, uint8_t *data, uint8_t bytes_number, uint8_t stop_bit)
I2C Read data from slave device.
Definition: no_os_i2c.c:190
adt7420_i2c_reg_read
int adt7420_i2c_reg_read(struct adt7420_dev *dev, uint16_t register_address, uint16_t *data)
Reads the value of a register I2C interface device.
Definition: adt7420.c:445
no_os_malloc
void * no_os_malloc(size_t size)
Allocate memory and return a pointer to it.
Definition: chibios_alloc.c:43
ID_ADT7311
@ ID_ADT7311
Definition: adt7420.h:134
no_os_i2c.h
Header file of I2C Interface.
ADT7420_CONFIG_OP_MODE
#define ADT7420_CONFIG_OP_MODE(x)
Definition: adt7420.h:92
no_os_field_get
uint32_t no_os_field_get(uint32_t mask, uint32_t word)
adt7420_init_param::interface_init
union adt7420_init_param::interface_type interface_init
no_os_free
void no_os_free(void *ptr)
Deallocate memory previously allocated by a call to no_os_calloc or no_os_malloc.
Definition: chibios_alloc.c:69
adt7420_init_param::interface_type::spi_init
struct no_os_spi_init_param spi_init
Definition: adt7420.h:156
adt7420_reset
int32_t adt7420_reset(struct adt7420_dev *dev)
Resets the SPI or I2C inteface for the ADT7420/ADT7320.
Definition: adt7420.c:340
adt7420_chip_info::resolution
uint8_t resolution
Definition: adt7420.h:125
adt7420_dev::i2c_desc
struct no_os_i2c_desc * i2c_desc
Definition: adt7420.h:141
no_os_i2c_init_param
Structure holding the parameters for I2C initialization.
Definition: no_os_i2c.h:64
adt7420_chip_info
Definition: adt7420.h:124
adt7420_chip_info::communication
enum dev_interface communication
Definition: adt7420.h:126
adt7420_reg_read
int adt7420_reg_read(struct adt7420_dev *dev, uint16_t register_address, uint16_t *data)
Reads the value of a register.
Definition: adt7420.c:75
init_param
struct ad7616_init_param init_param
Definition: ad7616_sdz.c:113
adt7420_dev
Definition: adt7420.h:139
adt7420_dev::active_device
enum adt7420_type active_device
Definition: adt7420.h:145
no_os_spi_remove
int32_t no_os_spi_remove(struct no_os_spi_desc *desc)
Free the resources allocated by no_os_spi_init().
Definition: no_os_spi.c:116
ADT7320_WRITE_MASK_CMD
#define ADT7320_WRITE_MASK_CMD
Definition: adt7420.h:67
adt7420_set_operation_mode
int adt7420_set_operation_mode(struct adt7420_dev *dev, uint8_t mode)
Sets the operational mode for ADT7420/ADT7320.
Definition: adt7420.c:289
no_os_spi_init
int32_t no_os_spi_init(struct no_os_spi_desc **desc, const struct no_os_spi_init_param *param)
Initialize the SPI communication peripheral.
Definition: no_os_spi.c:52
no_os_get_unaligned_be16
uint16_t no_os_get_unaligned_be16(uint8_t *buf)
ADT7420_REG_TEMP_MSB
#define ADT7420_REG_TEMP_MSB
Definition: adt7420.h:71
adt7420_init_param::active_device
enum adt7420_type active_device
Definition: adt7420.h:161
no_os_util.h
Header file of utility functions.
adt7420_init
int32_t adt7420_init(struct adt7420_dev **device, struct adt7420_init_param init_param)
Initializes the communication peripheral and checks if the device is present.
Definition: adt7420.c:202
SPI
@ SPI
Definition: adxl372.h:316
ADT7420_REG_RESET
#define ADT7420_REG_RESET
Definition: adt7420.h:83
adt7420_reg_write
int adt7420_reg_write(struct adt7420_dev *dev, uint16_t register_address, uint32_t data)
Sets the value of a register SPI/I2C.
Definition: adt7420.c:178
ADT7420_16BIT_SIGN
#define ADT7420_16BIT_SIGN
Definition: adt7420.h:97
adt7420_set_resolution
int adt7420_set_resolution(struct adt7420_dev *dev, uint8_t resolution)
Sets the resolution for ADT7420/ADT7320.
Definition: adt7420.c:315
adt7420_reg_write
int adt7420_reg_write(struct adt7420_dev *dev, uint16_t register_address, uint32_t data)
Sets the value of a register SPI/I2C.
Definition: adt7420.c:178
ADT7420_13BIT_SIGN
#define ADT7420_13BIT_SIGN
Definition: adt7420.h:100
adt7420_is_spi
bool adt7420_is_spi(struct adt7420_dev *dev)
Check if the interface of the selected device is SPI.
Definition: adt7420.c:477
no_os_spi_init_param
Structure holding the parameters for SPI initialization.
Definition: no_os_spi.h:140
adt7420.h
Header file of ADT7420 Driver.