1 /* 2 * Copyright (C) 2021 Alibaba Group Holding Limited 3 */ 4 5 #ifndef _AOS_ADC_CORE_H 6 #define _AOS_ADC_CORE_H 7 8 #include <stdint.h> 9 #include <aos/kernel.h> 10 #include <aos/device_core.h> 11 #include <aos/adc.h> 12 13 /** @defgroup driver_api driver 14 * @ingroup aos_components 15 * @{ 16 */ 17 18 /** @} */ 19 20 /** 21 * @defgroup aos_adc_driver ADC驱动操作 22 * @ingroup driver_api 23 * 给ADC驱动提供ADC设备注册/注销操作. 24 * 25 * @{ 26 */ 27 28 struct aos_adc_ops; 29 30 typedef struct aos_adc { 31 aos_dev_t dev; 32 33 const struct aos_adc_ops *ops; /**< ADC设备的底层操作, 设备注册前必须赋值 */ 34 uint32_t resolution; /**< ADC设备分辨率(单位:bits), 设备注册前必须赋值 */ 35 uint32_t freq; /**< ADC设备时钟频率(单位:HZ), 设备注册前必须赋值 */ 36 void *priv; /**< 私有数据 */ 37 } aos_adc_t; 38 39 typedef struct aos_adc_ops { 40 /**< ADC设备的注销操作(可选) */ 41 void (*unregister)(aos_adc_t *adc); 42 /**< ADC设备的开始采样 */ 43 aos_status_t (*startup)(aos_adc_t *adc); 44 /**< ADC设备的停止采样 */ 45 void (*shutdown)(aos_adc_t *adc); 46 /**< 读取ADC设备的原始数据 */ 47 aos_status_t (*read)(aos_adc_t *adc, int32_t channel, int32_t *data); 48 /**< 读取ADC设备的转换后的电压值(单位: mV)*/ 49 aos_status_t (*read_voltage)(aos_adc_t *adc, int32_t channel, int32_t *data); 50 /**< 设置ADC设备的通道(开启与关闭)(可选)*/ 51 aos_status_t (*set_channel)(aos_adc_t *adc, int32_t channel, bool enable); 52 /**< 设置ADC设备的采样时间(单位: 时钟周期的倍数)(可选)*/ 53 aos_status_t (*set_sample_time)(aos_adc_t *adc, int32_t channel, uint32_t clock); 54 /**< 设置ADC设备的工作模式(可选)*/ 55 aos_status_t (*set_mode)(aos_adc_t *adc, aos_adc_mode_t clock); 56 /**< 获取ADC设备的电压量程 */ 57 aos_status_t (*get_range)(aos_adc_t *adc, int32_t channel, int32_t *range); 58 } aos_adc_ops_t; 59 60 #ifdef __cplusplus 61 extern "C" { 62 #endif 63 64 /** 65 * 注册一个ADC设备 66 * 67 * @param[in] adc 要注册的ADC设备,调用者应该分配内存并初始化设置它的ID 68 * 69 * @return 0: 成功; <0: 失败 70 */ 71 aos_status_t aos_adc_register(aos_adc_t *adc); 72 73 /** 74 * 注销一个ADC设备 75 * 76 * @param[in] id ADC设备的ID 77 * 78 * @return 0: 成功; <0: 失败 79 */ 80 aos_status_t aos_adc_unregister(uint32_t id); 81 82 /** @} */ 83 #ifdef __cplusplus 84 } 85 #endif 86 87 #endif /* _AOS_ADC_CORE_H */ 88