14
14
#define __ADC_H__
15
15
16
16
#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
+
17
63
64
+ /*!
65
+ * @addtogroup ADC
66
+ * @{
67
+ */
18
68
#define RT_ADC_INTERN_CH_TEMPER (-1)
19
69
#define RT_ADC_INTERN_CH_VREF (-2)
20
70
#define RT_ADC_INTERN_CH_VBAT (-3)
21
71
22
72
struct rt_adc_device ;
73
+ /**
74
+ * @brief Configure the adc device
75
+ */
23
76
struct rt_adc_ops
24
77
{
25
78
rt_err_t (* enabled )(struct rt_adc_device * device , rt_int8_t channel , rt_bool_t enabled );
26
79
rt_err_t (* convert )(struct rt_adc_device * device , rt_int8_t channel , rt_uint32_t * value );
27
80
rt_uint8_t (* get_resolution )(struct rt_adc_device * device );
28
81
rt_int16_t (* get_vref ) (struct rt_adc_device * device );
29
82
};
30
-
83
+ /**
84
+ * @brief adc device
85
+ */
31
86
struct rt_adc_device
32
87
{
33
88
struct rt_device parent ;
@@ -43,10 +98,51 @@ typedef enum
43
98
RT_ADC_CMD_GET_VREF = RT_DEVICE_CTRL_BASE (ADC ) + 4 , /* get reference voltage */
44
99
} rt_adc_cmd_t ;
45
100
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
+ */
46
110
rt_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
+ */
47
119
rt_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
+ */
48
128
rt_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
+ */
49
137
rt_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
+ */
50
146
rt_int16_t rt_adc_voltage (rt_adc_device_t dev , rt_int8_t channel );
51
147
52
148
#endif /* __ADC_H__ */
0 commit comments