1414#define __ADC_H__
1515
1616#include <rtthread.h>
17+ /**
18+ * @addtogroup Drivers RTTHREAD Driver
19+ * @defgroup ADC ADC
20+ *
21+ * @brief ADC driver api
22+ *
23+ * <b>Example</b>
24+ * @code {.c}
25+ * #define ADC_DEV_NAME "adc1"
26+ * #define ADC_DEV_CHANNEL 5
27+ * #define REFER_VOLTAGE 330
28+ * #define CONVERT_BITS (1 << 12)
29+ *
30+ * static int adc_vol_sample(int argc, char *argv[])
31+ * {
32+ * rt_adc_device_t adc_dev;
33+ * rt_uint32_t value, vol;
34+ *
35+ * rt_err_t ret = RT_EOK;
36+ *
37+ * adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);
38+ * if (adc_dev == RT_NULL)
39+ * {
40+ * rt_kprintf("adc sample run failed! can't find %s device!\n", ADC_DEV_NAME);
41+ * return RT_ERROR;
42+ * }
43+ *
44+ * ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);
45+ *
46+ * value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);
47+ * rt_kprintf("the value is :%d \n", value);
48+ *
49+ * vol = value * REFER_VOLTAGE / CONVERT_BITS;
50+ * rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100);
51+ *
52+ * ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL);
53+ *
54+ * return ret;
55+ * }
56+ * MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample);
57+ *
58+ * @endcode
59+ *
60+ * @ingroup Drivers
61+ */
62+
1763
64+ /*!
65+ * @addtogroup ADC
66+ * @{
67+ */
1868#define RT_ADC_INTERN_CH_TEMPER (-1)
1969#define RT_ADC_INTERN_CH_VREF (-2)
2070#define RT_ADC_INTERN_CH_VBAT (-3)
2171
2272struct rt_adc_device ;
73+ /**
74+ * @brief Configure the adc device
75+ */
2376struct rt_adc_ops
2477{
2578 rt_err_t (* enabled )(struct rt_adc_device * device , rt_int8_t channel , rt_bool_t enabled );
2679 rt_err_t (* convert )(struct rt_adc_device * device , rt_int8_t channel , rt_uint32_t * value );
2780 rt_uint8_t (* get_resolution )(struct rt_adc_device * device );
2881 rt_int16_t (* get_vref ) (struct rt_adc_device * device );
2982};
30-
83+ /**
84+ * @brief adc device
85+ */
3186struct rt_adc_device
3287{
3388 struct rt_device parent ;
@@ -43,10 +98,51 @@ typedef enum
4398 RT_ADC_CMD_GET_VREF = RT_DEVICE_CTRL_BASE (ADC ) + 4 , /* get reference voltage */
4499} rt_adc_cmd_t ;
45100
101+ /**
102+ * @brief register the adc device
103+ * @param adc adc device
104+ * @param name device name
105+ * @param ops device ops
106+ * @param user_data device private data
107+ * @return rt_err_t error code
108+ * @ingroup ADC
109+ */
46110rt_err_t rt_hw_adc_register (rt_adc_device_t adc ,const char * name , const struct rt_adc_ops * ops , const void * user_data );
111+
112+ /**
113+ * @brief read the adc value
114+ * @param dev adc device
115+ * @param channel adc channel
116+ * @return rt_uint32_t adc value
117+ * @ingroup ADC
118+ */
47119rt_uint32_t rt_adc_read (rt_adc_device_t dev , rt_int8_t channel );
120+
121+ /**
122+ * @brief enable the adc channel
123+ * @param dev adc device
124+ * @param channel adc channel
125+ * @return rt_err_t error code
126+ * @ingroup ADC
127+ */
48128rt_err_t rt_adc_enable (rt_adc_device_t dev , rt_int8_t channel );
129+
130+ /**
131+ * @brief disable the adc channel
132+ * @param dev adc device
133+ * @param channel adc channel
134+ * @return rt_err_t error code
135+ * @ingroup ADC
136+ */
49137rt_err_t rt_adc_disable (rt_adc_device_t dev , rt_int8_t channel );
138+
139+ /**
140+ * @brief get the adc resolution
141+ * @param dev adc device
142+ * @param channel adc channel
143+ * @return rt_int16_t adc resolution
144+ * @ingroup ADC
145+ */
50146rt_int16_t rt_adc_voltage (rt_adc_device_t dev , rt_int8_t channel );
51147
52148#endif /* __ADC_H__ */
0 commit comments