1 /* 2 * Copyright (C) 2021 Alibaba Group Holding Limited 3 */ 4 5 #ifndef _AOS_ADC_H 6 #define _AOS_ADC_H 7 8 #include <stdint.h> 9 #include <aos/kernel.h> 10 #include <aos/device.h> 11 12 #ifdef __cplusplus 13 extern "C" { 14 #endif 15 16 /** @defgroup driver_api driver 17 * @ingroup aos_components 18 * @{ 19 */ 20 21 /** @} */ 22 23 /** 24 * @defgroup aos_adc_app ADC应用操作 25 * @ingroup driver_api 26 * 给应用提供ADC操作的AOS ADC API. 27 * 28 * @{ 29 */ 30 31 typedef aos_dev_ref_t aos_adc_ref_t; /**< ADC设备的引用 */ 32 33 typedef enum { 34 AOS_ADC_MODE_SINGLE, /**< 单次采样模式 */ 35 AOS_ADC_MODE_CONTINUE, /**< 连续采样模式 */ 36 } aos_adc_mode_t; 37 38 /** 39 * 获取一个ADC设备的引用 40 * 41 * @param[out] ref ADC设备的引用 42 * @param[in] id ADC设备ID 43 * 44 * @return 0: 成功 <0: 失败 45 */ 46 aos_status_t aos_adc_get(aos_adc_ref_t *ref, uint32_t id); 47 48 /** 49 * 释放一个ADC设备的引用 50 * 51 * @param[in] ref ADC设备的引用 52 * 53 * @return 无 54 */ 55 void aos_adc_put(aos_adc_ref_t *ref); 56 57 /** 58 * 设置ADC设备的一个通道的采样时间 59 * 60 * @param[in] ref ADC设备的引用 61 * @param[in] channel >=0: 一个通道的ID -1: ADC设备的所有通道 62 * @param[in] time 采样时间(单位:us) 63 * 64 * @return 0: 成功 <0: 失败 65 */ 66 aos_status_t aos_adc_set_sample_time(aos_adc_ref_t *ref, int32_t channel, uint32_t time); 67 68 /** 69 * 设置ADC设备的工作模式 70 * 71 * @param[in] ref ADC设备的引用 72 * @param[in] mode 工作模式, 当前支持的模式:\n 73 * @ref AOS_ADC_MODE_SINGLE: 单次采样模式\n 74 * @ref AOS_ADC_MODE_CONTINUE: 连续采样模式\n 75 * 76 * @return 0: 成功 <0: 失败 77 */ 78 aos_status_t aos_adc_set_mode(aos_adc_ref_t *ref, aos_adc_mode_t mode); 79 80 /** 81 * 获取ADC设备的分辨率 82 * 83 * @param[in] ref ADC设备的引用 84 * @param[out] resolution ADC设备的分辨率 (单位:bits) 85 * 86 * @return 0: 成功 <0: 失败 87 */ 88 aos_status_t aos_adc_get_resolution(aos_adc_ref_t *ref, uint32_t *resolution); 89 90 /** 91 * 获取ADC设备的电压量程(单位:mV) 92 * 93 * @param[in] ref ADC设备的引用 94 * @param[in] channel >=0: 一个通道的ID -1: ADC设备的所有通道(相同的量程) 95 * @param[out] range ADC设备的电压量程(单位:mV) 96 * 97 * @return 0: 成功 <0: 失败 98 */ 99 aos_status_t aos_adc_get_range(aos_adc_ref_t *ref, int32_t channel, uint32_t *range); 100 101 /** 102 * 从ADC设备的一个通道读取原始数据 (同步方式) 103 * 104 * @param[in] ref ADC设备的引用 105 * @param[in] channel 通道ID 106 * @param[out] data 输出的ADC原始数据 107 * 108 * @return 0: 成功 <0: 失败 109 */ 110 aos_status_t aos_adc_read(aos_adc_ref_t *ref, int32_t channel, int32_t *data); 111 112 /** 113 * 从ADC设备的一个通道读取转换后的电压值(单位: mV) (同步方式) 114 * 115 * @param[in] ref ADC设备的引用 116 * @param[in] channel 通道ID 117 * @param[out] data 输出的ADC转换后电压值(单位: mV) 118 * 119 * @return 0: 成功 <0: 失败 120 */ 121 aos_status_t aos_adc_read_voltage(aos_adc_ref_t *ref, int32_t channel, int32_t *data); 122 123 /** @} */ 124 #ifdef __cplusplus 125 } 126 #endif 127 128 #endif /* _AOS_ADC_H */ 129