c3dhall10  2.0.0.0
c3dhall10.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2020 MikroElektronika d.o.o.
3 ** Contact: https://www.mikroe.com/contact
4 **
5 ** Permission is hereby granted, free of charge, to any person obtaining a copy
6 ** of this software and associated documentation files (the "Software"), to deal
7 ** in the Software without restriction, including without limitation the rights
8 ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 ** copies of the Software, and to permit persons to whom the Software is
10 ** furnished to do so, subject to the following conditions:
11 ** The above copyright notice and this permission notice shall be
12 ** included in all copies or substantial portions of the Software.
13 **
14 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16 ** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19 ** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 ** USE OR OTHER DEALINGS IN THE SOFTWARE.
21 ****************************************************************************/
22 
28 #ifndef C3DHALL10_H
29 #define C3DHALL10_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_spi_master.h"
48 #include "spi_specifics.h"
49 
70 #define C3DHALL10_REG_DEVICE_CONFIG 0x00
71 #define C3DHALL10_REG_SENSOR_CONFIG 0x01
72 #define C3DHALL10_REG_SYSTEM_CONFIG 0x02
73 #define C3DHALL10_REG_ALERT_CONFIG 0x03
74 #define C3DHALL10_REG_X_THRX_CONFIG 0x04
75 #define C3DHALL10_REG_Y_THRX_CONFIG 0x05
76 #define C3DHALL10_REG_Z_THRX_CONFIG 0x06
77 #define C3DHALL10_REG_T_THRX_CONFIG 0x07
78 #define C3DHALL10_REG_CONV_STATUS 0x08
79 #define C3DHALL10_REG_X_CH_RESULT 0x09
80 #define C3DHALL10_REG_Y_CH_RESULT 0x0A
81 #define C3DHALL10_REG_Z_CH_RESULT 0x0B
82 #define C3DHALL10_REG_TEMP_RESULT 0x0C
83 #define C3DHALL10_REG_AFE_STATUS 0x0D
84 #define C3DHALL10_REG_SYS_STATUS 0x0E
85 #define C3DHALL10_REG_TEST_CONFIG 0x0F
86 #define C3DHALL10_REG_OSC_MONITOR 0x10
87 #define C3DHALL10_REG_MAG_GAIN_CONFIG 0x11
88 #define C3DHALL10_REG_MAG_OFFSET_CONFIG 0x12
89 #define C3DHALL10_REG_ANGLE_RESULT 0x13
90 #define C3DHALL10_REG_MAGNITUDE_RESULT 0x14
91  // c3dhall10_reg
93 
108 #define C3DHALL10_CONV_AVG_1X 0x0000
109 #define C3DHALL10_CONV_AVG_2X 0x1000
110 #define C3DHALL10_CONV_AVG_4X 0x2000
111 #define C3DHALL10_CONV_AVG_8X 0x3000
112 #define C3DHALL10_CONV_AVG_16X 0x4000
113 #define C3DHALL10_CONV_AVG_32X 0x5000
114 #define C3DHALL10_CONV_AVG_BIT_MASK 0x7000
115 #define C3DHALL10_MAG_TEMPCO_0 0x0000
116 #define C3DHALL10_MAG_TEMPCO_0p12 0x0100
117 #define C3DHALL10_MAG_TEMPCO_0p03 0x0200
118 #define C3DHALL10_MAG_TEMPCO_0p2 0x0300
119 #define C3DHALL10_MAG_TEMPCO_BIT_MASK 0x0300
120 #define C3DHALL10_OPERATING_MODE_CONFIG 0x0000
121 #define C3DHALL10_OPERATING_MODE_STANDBY 0x0010
122 #define C3DHALL10_OPERATING_MODE_MEASURE 0x0020
123 #define C3DHALL10_OPERATING_MODE_TRIGGER 0x0030
124 #define C3DHALL10_OPERATING_MODE_DUTY_CYCLED 0x0040
125 #define C3DHALL10_OPERATING_MODE_SLEEP 0x0050
126 #define C3DHALL10_OPERATING_MODE_DEEP_SLEEP 0x0060
127 #define C3DHALL10_OPERATING_MODE_BIT_MASK 0x0070
128 #define C3DHALL10_T_CH_EN_DISABLE 0x0000
129 #define C3DHALL10_T_CH_EN_ENABLE 0x0008
130 #define C3DHALL10_T_CH_EN_BIT_MASK 0x0008
131 #define C3DHALL10_T_RATE_PER_CONV_AVG 0x0000
132 #define C3DHALL10_T_RATE_ONCE_PER_CONV 0x0004
133 #define C3DHALL10_T_RATE_BIT_MASK 0x0004
134 #define C3DHALL10_T_HLT_EN_DISABLE 0x0000
135 #define C3DHALL10_T_HLT_EN_ENABLE 0x0002
136 #define C3DHALL10_T_HLT_EN_BIT_MASK 0x0002
137 
142 #define C3DHALL10_ANGLE_EN_NO_ANGLE 0x0000
143 #define C3DHALL10_ANGLE_EN_XY_ANGLE 0x4000
144 #define C3DHALL10_ANGLE_EN_YZ_ANGLE 0x8000
145 #define C3DHALL10_ANGLE_EN_XZ_ANGLE 0xC000
146 #define C3DHALL10_ANGLE_EN_BIT_MASK 0xC000
147 #define C3DHALL10_SLEEPTIME_1MS 0x0000
148 #define C3DHALL10_SLEEPTIME_5MS 0x0400
149 #define C3DHALL10_SLEEPTIME_10MS 0x0800
150 #define C3DHALL10_SLEEPTIME_15MS 0x0C00
151 #define C3DHALL10_SLEEPTIME_20MS 0x1000
152 #define C3DHALL10_SLEEPTIME_30MS 0x1400
153 #define C3DHALL10_SLEEPTIME_50MS 0x1800
154 #define C3DHALL10_SLEEPTIME_100MS 0x1C00
155 #define C3DHALL10_SLEEPTIME_500MS 0x2000
156 #define C3DHALL10_SLEEPTIME_1000MS 0x2400
157 #define C3DHALL10_SLEEPTIME_BIT_MASK 0x3C00
158 #define C3DHALL10_MAG_CH_EN_DISABLE 0x0000
159 #define C3DHALL10_MAG_CH_EN_ENABLE_X 0x0040
160 #define C3DHALL10_MAG_CH_EN_ENABLE_Y 0x0080
161 #define C3DHALL10_MAG_CH_EN_ENABLE_XY 0x00C0
162 #define C3DHALL10_MAG_CH_EN_ENABLE_Z 0x0100
163 #define C3DHALL10_MAG_CH_EN_ENABLE_ZX 0x0140
164 #define C3DHALL10_MAG_CH_EN_ENABLE_YZ 0x0180
165 #define C3DHALL10_MAG_CH_EN_ENABLE_XYZ 0x01C0
166 #define C3DHALL10_MAG_CH_EN_ENABLE_XYX 0x0200
167 #define C3DHALL10_MAG_CH_EN_ENABLE_YXY 0x0240
168 #define C3DHALL10_MAG_CH_EN_ENABLE_YZY 0x0280
169 #define C3DHALL10_MAG_CH_EN_ENABLE_ZYZ 0x02C0
170 #define C3DHALL10_MAG_CH_EN_ENABLE_ZXZ 0x0300
171 #define C3DHALL10_MAG_CH_EN_ENABLE_XZX 0x0340
172 #define C3DHALL10_MAG_CH_EN_ENABLE_XYZYX 0x0380
173 #define C3DHALL10_MAG_CH_EN_ENABLE_XYZZYX 0x03C0
174 #define C3DHALL10_MAG_CH_EN_BIT_MASK 0x03C0
175 #define C3DHALL10_Z_RANGE_50mT 0x0000
176 #define C3DHALL10_Z_RANGE_25mT 0x0010
177 #define C3DHALL10_Z_RANGE_100mT 0x0020
178 #define C3DHALL10_Z_RANGE_BIT_MASK 0x0030
179 #define C3DHALL10_Y_RANGE_50mT 0x0000
180 #define C3DHALL10_Y_RANGE_25mT 0x0004
181 #define C3DHALL10_Y_RANGE_100mT 0x0008
182 #define C3DHALL10_Y_RANGE_BIT_MASK 0x000C
183 #define C3DHALL10_X_RANGE_50mT 0x0000
184 #define C3DHALL10_X_RANGE_25mT 0x0001
185 #define C3DHALL10_X_RANGE_100mT 0x0002
186 #define C3DHALL10_X_RANGE_BIT_MASK 0x0003
187 
192 #define C3DHALL10_DIAG_SEL_ALL_DP_DIAG_ALL 0x0000
193 #define C3DHALL10_DIAG_SEL_EN_DP_ONLY_DIAG_ALL 0x1000
194 #define C3DHALL10_DIAG_SEL_ALL_DP_DIAG_SEQ 0x2000
195 #define C3DHALL10_DIAG_SEL_EN_DP_ONLY_DIAG_SEQ 0x3000
196 #define C3DHALL10_DIAG_SEL_BIT_MASK 0x3000
197 #define C3DHALL10_TRIGGER_MODE_SPI_CMD 0x0000
198 #define C3DHALL10_TRIGGER_MODE_CS_PULSE 0x0200
199 #define C3DHALL10_TRIGGER_MODE_ALERT_PULSE 0x0400
200 #define C3DHALL10_TRIGGER_MODE_BIT_MASK 0x0600
201 #define C3DHALL10_DATA_TYPE_32BIT_REG 0x0000
202 #define C3DHALL10_DATA_TYPE_12BIT_XY_DATA 0x0040
203 #define C3DHALL10_DATA_TYPE_12BIT_XZ_DATA 0x0080
204 #define C3DHALL10_DATA_TYPE_12BIT_ZY_DATA 0x00C0
205 #define C3DHALL10_DATA_TYPE_12BIT_XT_DATA 0x0100
206 #define C3DHALL10_DATA_TYPE_12BIT_YT_DATA 0x0140
207 #define C3DHALL10_DATA_TYPE_12BIT_ZT_DATA 0x0180
208 #define C3DHALL10_DATA_TYPE_12BIT_AM_DATA 0x01C0
209 #define C3DHALL10_DATA_TYPE_BIT_MASK 0x01C0
210 #define C3DHALL10_DIAG_EN_DISABLE 0x0000
211 #define C3DHALL10_DIAG_EN_ENABLE 0x0020
212 #define C3DHALL10_DIAG_EN_BIT_MASK 0x0020
213 #define C3DHALL10_Z_HLT_EN_DISABLE 0x0000
214 #define C3DHALL10_Z_HLT_EN_ENABLE 0x0004
215 #define C3DHALL10_Z_HLT_EN_BIT_MASK 0x0004
216 #define C3DHALL10_Y_HLT_EN_DISABLE 0x0000
217 #define C3DHALL10_Y_HLT_EN_ENABLE 0x0002
218 #define C3DHALL10_Y_HLT_EN_BIT_MASK 0x0002
219 #define C3DHALL10_X_HLT_EN_DISABLE 0x0000
220 #define C3DHALL10_X_HLT_EN_ENABLE 0x0001
221 #define C3DHALL10_X_HLT_EN_BIT_MASK 0x0001
222 
227 #define C3DHALL10_ALERT_LATCH_DISABLE 0x0000
228 #define C3DHALL10_ALERT_LATCH_ENABLE 0x2000
229 #define C3DHALL10_ALERT_LATCH_BIT_MASK 0x2000
230 #define C3DHALL10_ALERT_MODE_INTERRUPT 0x0000
231 #define C3DHALL10_ALERT_MODE_SWITCH 0x1000
232 #define C3DHALL10_ALERT_MODE_BIT_MASK 0x1000
233 #define C3DHALL10_STATUS_ALRT_AFE_SYS_NO_ASSERT 0x0000
234 #define C3DHALL10_STATUS_ALRT_AFE_SYS_ASSERT 0x0800
235 #define C3DHALL10_STATUS_ALRT_BIT_MASK 0x0800
236 #define C3DHALL10_RSLT_ALRT_NO_CONV_COMPLETE 0x0000
237 #define C3DHALL10_RSLT_ALRT_CONV_COMPLETE 0x0100
238 #define C3DHALL10_RSLT_ALRT_BIT_MASK 0x0100
239 #define C3DHALL10_THRX_COUNT_1_CONV 0x0000
240 #define C3DHALL10_THRX_COUNT_2_CONV 0x0010
241 #define C3DHALL10_THRX_COUNT_3_CONV 0x0020
242 #define C3DHALL10_THRX_COUNT_4_CONV 0x0030
243 #define C3DHALL10_THRX_COUNT_BIT_MASK 0x0030
244 #define C3DHALL10_T_THRX_ALRT_NO_CROSSED 0x0000
245 #define C3DHALL10_T_THRX_ALRT_CROSSED 0x0008
246 #define C3DHALL10_T_THRX_ALRT_BIT_MASK 0x0008
247 #define C3DHALL10_Z_THRX_ALRT_NO_CROSSED 0x0000
248 #define C3DHALL10_Z_THRX_ALRT_CROSSED 0x0004
249 #define C3DHALL10_Z_THRX_ALRT_BIT_MASK 0x0004
250 #define C3DHALL10_Y_THRX_ALRT_NO_CROSSED 0x0000
251 #define C3DHALL10_Y_THRX_ALRT_CROSSED 0x0002
252 #define C3DHALL10_Y_THRX_ALRT_BIT_MASK 0x0002
253 #define C3DHALL10_X_THRX_ALRT_NO_CROSSED 0x0000
254 #define C3DHALL10_X_THRX_ALRT_CROSSED 0x0001
255 #define C3DHALL10_X_THRX_ALRT_BIT_MASK 0x0001
256 
261 #define C3DHALL10_GAIN_SELECTION_NO_AXIS 0x0000
262 #define C3DHALL10_GAIN_SELECTION_X_AXIS 0x4000
263 #define C3DHALL10_GAIN_SELECTION_Y_AXIS 0x8000
264 #define C3DHALL10_GAIN_SELECTION_Z_AXIS 0xC000
265 #define C3DHALL10_GAIN_SELECTION_BIT_MASK 0xC000
266 #define C3DHALL10_GAIN_VALUE_BIT_MASK 0x07FF
267 
272 #define C3DHALL10_CONV_STATUS_RDY 0x2000
273 #define C3DHALL10_CONV_STATUS_A 0x1000
274 #define C3DHALL10_CONV_STATUS_T 0x0800
275 #define C3DHALL10_CONV_STATUS_Z 0x0400
276 #define C3DHALL10_CONV_STATUS_Y 0x0200
277 #define C3DHALL10_CONV_STATUS_X 0x0100
278 #define C3DHALL10_CONV_STATUS_SET_COUNT 0x0070
279 #define C3DHALL10_CONV_STATUS_ALRT_STATUS 0x0003
280 
285 #define C3DHALL10_ANGLE_RESOLUTION 16.0
286 #define C3DHALL10_TEMP_SENS_T0 25.0
287 #define C3DHALL10_TEMP_ADC_T0 17522
288 #define C3DHALL10_TEMP_ADC_RESOLUTION 60.0
289 #define C3DHALL10_XYZ_RESOLUTION 32768.0
290 
295 #define C3DHALL10_SPI_READ_MASK 0x80
296 #define C3DHALL10_SPI_WRITE_MASK 0x7F
297 
306 #define C3DHALL10_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
307 #define C3DHALL10_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
308  // c3dhall10_set
310 
325 #define C3DHALL10_MAP_MIKROBUS( cfg, mikrobus ) \
326  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
327  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
328  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
329  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
330  cfg.alr = MIKROBUS( mikrobus, MIKROBUS_INT )
331  // c3dhall10_map // c3dhall10
334 
339 typedef struct
340 {
341  float x_axis;
342  float y_axis;
343  float z_axis;
344  float angle;
345  uint16_t magnitude;
346  float temperature;
347 
349 
354 typedef struct
355 {
356  // Input pins
357  digital_in_t alr;
359  // Modules
360  spi_master_t spi;
362  pin_name_t chip_select;
364 } c3dhall10_t;
365 
370 typedef struct
371 {
372  // Communication gpio pins
373  pin_name_t miso;
374  pin_name_t mosi;
375  pin_name_t sck;
376  pin_name_t cs;
378  // Additional gpio pins
379  pin_name_t alr;
381  // static variable
382  uint32_t spi_speed;
383  spi_master_mode_t spi_mode;
384  spi_master_chip_select_polarity_t cs_polarity;
387 
392 typedef enum
393 {
395  C3DHALL10_ERROR = -1
396 
398 
415 
430 
444 
457 err_t c3dhall10_write_frame ( c3dhall10_t *ctx, uint8_t reg_addr, uint16_t data_in );
458 
472 err_t c3dhall10_read_frame ( c3dhall10_t *ctx, uint8_t reg_addr, uint16_t *data_out, uint16_t *status );
473 
489 
500 
501 #ifdef __cplusplus
502 }
503 #endif
504 #endif // C3DHALL10_H
505  // c3dhall10
507 
508 // ------------------------------------------------------------------------ END
c3dhall10_data_t::x_axis
float x_axis
Definition: c3dhall10.h:341
c3dhall10_data_t::magnitude
uint16_t magnitude
Definition: c3dhall10.h:345
spi_specifics.h
This file contains SPI specific macros, functions, etc.
C3DHALL10_OK
@ C3DHALL10_OK
Definition: c3dhall10.h:394
c3dhall10_cfg_t::mosi
pin_name_t mosi
Definition: c3dhall10.h:374
c3dhall10_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: c3dhall10.h:383
c3dhall10_get_alert_pin
uint8_t c3dhall10_get_alert_pin(c3dhall10_t *ctx)
3D Hall 10 get alert pin function.
c3dhall10_write_frame
err_t c3dhall10_write_frame(c3dhall10_t *ctx, uint8_t reg_addr, uint16_t data_in)
3D Hall 10 write frame function.
c3dhall10_cfg_t::cs
pin_name_t cs
Definition: c3dhall10.h:376
c3dhall10_default_cfg
err_t c3dhall10_default_cfg(c3dhall10_t *ctx)
3D Hall 10 default configuration function.
c3dhall10_cfg_t::miso
pin_name_t miso
Definition: c3dhall10.h:373
c3dhall10_t::spi
spi_master_t spi
Definition: c3dhall10.h:360
c3dhall10_data_t::z_axis
float z_axis
Definition: c3dhall10.h:343
c3dhall10_data_t::y_axis
float y_axis
Definition: c3dhall10.h:342
c3dhall10_data_t
3D Hall 10 Click data object.
Definition: c3dhall10.h:340
c3dhall10_data_t::temperature
float temperature
Definition: c3dhall10.h:346
c3dhall10_t::chip_select
pin_name_t chip_select
Definition: c3dhall10.h:362
c3dhall10_init
err_t c3dhall10_init(c3dhall10_t *ctx, c3dhall10_cfg_t *cfg)
3D Hall 10 initialization function.
c3dhall10_read_frame
err_t c3dhall10_read_frame(c3dhall10_t *ctx, uint8_t reg_addr, uint16_t *data_out, uint16_t *status)
3D Hall 10 read frame function.
c3dhall10_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: c3dhall10.h:384
c3dhall10_cfg_t::spi_speed
uint32_t spi_speed
Definition: c3dhall10.h:382
c3dhall10_cfg_t
3D Hall 10 Click configuration object.
Definition: c3dhall10.h:371
c3dhall10_t
3D Hall 10 Click context object.
Definition: c3dhall10.h:355
c3dhall10_t::alr
digital_in_t alr
Definition: c3dhall10.h:357
c3dhall10_return_value_t
c3dhall10_return_value_t
3D Hall 10 Click return value data.
Definition: c3dhall10.h:393
c3dhall10_cfg_t::alr
pin_name_t alr
Definition: c3dhall10.h:379
c3dhall10_cfg_t::sck
pin_name_t sck
Definition: c3dhall10.h:375
c3dhall10_cfg_setup
void c3dhall10_cfg_setup(c3dhall10_cfg_t *cfg)
3D Hall 10 configuration object setup function.
C3DHALL10_ERROR
@ C3DHALL10_ERROR
Definition: c3dhall10.h:395
c3dhall10_data_t::angle
float angle
Definition: c3dhall10.h:344
c3dhall10_read_data
err_t c3dhall10_read_data(c3dhall10_t *ctx, c3dhall10_data_t *data_out)
3D Hall 10 read data function.