Zephyr API Documentation  2.7.0-rc2
A Scalable Open Source RTOS
adc.h
Go to the documentation of this file.
1
6/*
7 * Copyright (c) 2018 Nordic Semiconductor ASA
8 * Copyright (c) 2015 Intel Corporation
9 *
10 * SPDX-License-Identifier: Apache-2.0
11 */
12
13#ifndef ZEPHYR_INCLUDE_DRIVERS_ADC_H_
14#define ZEPHYR_INCLUDE_DRIVERS_ADC_H_
15
16#include <device.h>
17#include <dt-bindings/adc/adc.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
50};
51
69 int32_t *value);
70
80};
81
88
91
102
126
129
130#ifdef CONFIG_ADC_CONFIGURABLE_INPUTS
136 uint8_t input_positive;
137
143 uint8_t input_negative;
144#endif /* CONFIG_ADC_CONFIGURABLE_INPUTS */
145};
146
170static inline int adc_raw_to_millivolts(int32_t ref_mv,
171 enum adc_gain gain,
172 uint8_t resolution,
173 int32_t *valp)
174{
175 int32_t adc_mv = *valp * ref_mv;
176 int ret = adc_gain_invert(gain, &adc_mv);
177
178 if (ret == 0) {
179 *valp = (adc_mv >> resolution);
180 }
181
182 return ret;
183}
184
185/* Forward declaration of the adc_sequence structure. */
186struct adc_sequence;
187
194
200
203};
204
224typedef enum adc_action (*adc_sequence_callback)(const struct device *dev,
225 const struct adc_sequence *sequence,
226 uint16_t sampling_index);
227
242
248
254
260};
261
271
279
289 void *buffer;
290
298
307
315
325};
326
327
332typedef int (*adc_api_channel_setup)(const struct device *dev,
333 const struct adc_channel_cfg *channel_cfg);
334
339typedef int (*adc_api_read)(const struct device *dev,
340 const struct adc_sequence *sequence);
341
347typedef int (*adc_api_read_async)(const struct device *dev,
348 const struct adc_sequence *sequence,
349 struct k_poll_signal *async);
350
356__subsystem struct adc_driver_api {
359#ifdef CONFIG_ADC_ASYNC
360 adc_api_read_async read_async;
361#endif
363};
364
377__syscall int adc_channel_setup(const struct device *dev,
378 const struct adc_channel_cfg *channel_cfg);
379
380static inline int z_impl_adc_channel_setup(const struct device *dev,
381 const struct adc_channel_cfg *channel_cfg)
382{
383 const struct adc_driver_api *api =
384 (const struct adc_driver_api *)dev->api;
385
386 return api->channel_setup(dev, channel_cfg);
387}
388
410__syscall int adc_read(const struct device *dev,
411 const struct adc_sequence *sequence);
412
413static inline int z_impl_adc_read(const struct device *dev,
414 const struct adc_sequence *sequence)
415{
416 const struct adc_driver_api *api =
417 (const struct adc_driver_api *)dev->api;
418
419 return api->read(dev, sequence);
420}
421
442__syscall int adc_read_async(const struct device *dev,
443 const struct adc_sequence *sequence,
444 struct k_poll_signal *async);
445
446
447#ifdef CONFIG_ADC_ASYNC
448static inline int z_impl_adc_read_async(const struct device *dev,
449 const struct adc_sequence *sequence,
450 struct k_poll_signal *async)
451{
452 const struct adc_driver_api *api =
453 (const struct adc_driver_api *)dev->api;
454
455 return api->read_async(dev, sequence, async);
456}
457#endif /* CONFIG_ADC_ASYNC */
458
468static inline uint16_t adc_ref_internal(const struct device *dev)
469{
470 const struct adc_driver_api *api =
471 (const struct adc_driver_api *)dev->api;
472
473 return api->ref_internal;
474}
475
480#ifdef __cplusplus
481}
482#endif
483
484#include <syscalls/adc.h>
485
486#endif /* ZEPHYR_INCLUDE_DRIVERS_ADC_H_ */
int adc_read_async(const struct device *dev, const struct adc_sequence *sequence, struct k_poll_signal *async)
Set an asynchronous read request.
adc_gain
ADC channel gain factors.
Definition: adc.h:31
int(* adc_api_read)(const struct device *dev, const struct adc_sequence *sequence)
Type definition of ADC API function for setting a read request. See adc_read() for argument descripti...
Definition: adc.h:339
int adc_gain_invert(enum adc_gain gain, int32_t *value)
Invert the application of gain to a measurement value.
int adc_read(const struct device *dev, const struct adc_sequence *sequence)
Set a read request.
int adc_channel_setup(const struct device *dev, const struct adc_channel_cfg *channel_cfg)
Configure an ADC channel.
int(* adc_api_channel_setup)(const struct device *dev, const struct adc_channel_cfg *channel_cfg)
Type definition of ADC API function for configuring a channel. See adc_channel_setup() for argument d...
Definition: adc.h:332
adc_action
Action to be performed after a sampling is done.
Definition: adc.h:191
enum adc_action(* adc_sequence_callback)(const struct device *dev, const struct adc_sequence *sequence, uint16_t sampling_index)
Type definition of the optional callback function to be called after a requested sampling is done.
Definition: adc.h:224
adc_reference
ADC references.
Definition: adc.h:72
int(* adc_api_read_async)(const struct device *dev, const struct adc_sequence *sequence, struct k_poll_signal *async)
Type definition of ADC API function for setting an asynchronous read request. See adc_read_async() fo...
Definition: adc.h:347
static uint16_t adc_ref_internal(const struct device *dev)
Get the internal reference voltage.
Definition: adc.h:468
static int adc_raw_to_millivolts(int32_t ref_mv, enum adc_gain gain, uint8_t resolution, int32_t *valp)
Convert a raw ADC value to millivolts.
Definition: adc.h:170
@ ADC_GAIN_64
Definition: adc.h:48
@ ADC_GAIN_3
Definition: adc.h:40
@ ADC_GAIN_4
Definition: adc.h:41
@ ADC_GAIN_1_5
Definition: adc.h:33
@ ADC_GAIN_128
Definition: adc.h:49
@ ADC_GAIN_1_2
Definition: adc.h:36
@ ADC_GAIN_12
Definition: adc.h:44
@ ADC_GAIN_16
Definition: adc.h:45
@ ADC_GAIN_24
Definition: adc.h:46
@ ADC_GAIN_1
Definition: adc.h:38
@ ADC_GAIN_6
Definition: adc.h:42
@ ADC_GAIN_1_6
Definition: adc.h:32
@ ADC_GAIN_32
Definition: adc.h:47
@ ADC_GAIN_2_3
Definition: adc.h:37
@ ADC_GAIN_8
Definition: adc.h:43
@ ADC_GAIN_1_3
Definition: adc.h:35
@ ADC_GAIN_1_4
Definition: adc.h:34
@ ADC_GAIN_2
Definition: adc.h:39
@ ADC_ACTION_FINISH
Definition: adc.h:202
@ ADC_ACTION_REPEAT
Definition: adc.h:199
@ ADC_ACTION_CONTINUE
Definition: adc.h:193
@ ADC_REF_INTERNAL
Definition: adc.h:77
@ ADC_REF_EXTERNAL1
Definition: adc.h:79
@ ADC_REF_VDD_1_2
Definition: adc.h:74
@ ADC_REF_VDD_1_3
Definition: adc.h:75
@ ADC_REF_VDD_1_4
Definition: adc.h:76
@ ADC_REF_VDD_1
Definition: adc.h:73
@ ADC_REF_EXTERNAL0
Definition: adc.h:78
static ZTEST_BMEM volatile int ret
Definition: k_float_disable.c:28
__UINT32_TYPE__ uint32_t
Definition: stdint.h:60
__INT32_TYPE__ int32_t
Definition: stdint.h:44
__UINT8_TYPE__ uint8_t
Definition: stdint.h:58
__UINT16_TYPE__ uint16_t
Definition: stdint.h:59
Structure for specifying the configuration of an ADC channel.
Definition: adc.h:85
enum adc_gain gain
Definition: adc.h:87
uint8_t differential
Definition: adc.h:128
uint16_t acquisition_time
Definition: adc.h:101
enum adc_reference reference
Definition: adc.h:90
uint8_t channel_id
Definition: adc.h:125
ADC driver API.
Definition: adc.h:356
adc_api_read read
Definition: adc.h:358
uint16_t ref_internal
Definition: adc.h:362
adc_api_channel_setup channel_setup
Definition: adc.h:357
Structure defining additional options for an ADC sampling sequence.
Definition: adc.h:231
void * user_data
Definition: adc.h:253
uint16_t extra_samplings
Definition: adc.h:259
adc_sequence_callback callback
Definition: adc.h:247
uint32_t interval_us
Definition: adc.h:241
Structure defining an ADC sampling sequence.
Definition: adc.h:265
uint8_t oversampling
Definition: adc.h:314
const struct adc_sequence_options * options
Definition: adc.h:270
uint32_t channels
Definition: adc.h:278
void * buffer
Definition: adc.h:289
bool calibrate
Definition: adc.h:324
size_t buffer_size
Definition: adc.h:297
uint8_t resolution
Definition: adc.h:306
Runtime device structure (in ROM) per driver instance.
Definition: device.h:367
const void * api
Definition: device.h:373
Definition: kernel.h:5405