XFusion API v1.3.0
载入中...
搜索中...
未找到
xf_hal_adc.c
浏览该文件的文档.
1
12/* ==================== [Includes] ========================================== */
13
14#include "xf_hal_adc.h"
15
16#if XF_HAL_ADC_IS_ENABLE
17
18#include "../kernel/xf_hal_dev.h"
19
20/* ==================== [Defines] =========================================== */
21
22#define TAG "hal_adc"
23#define XF_HAL_ADC_TYPE XF_HAL_ADC
24
25/* ==================== [Typedefs] ========================================== */
26
27typedef struct _xf_hal_adc_t {
28 xf_hal_dev_t dev; // 一定要放到第一个,以便后续close一起free
31
32/* ==================== [Static Prototypes] ================================= */
33
35
36/* ==================== [Static Variables] ================================== */
37
38/* ==================== [Macros] ============================================ */
39
40#define XF_HAL_ADC_CHECK(condition, retval, format, ...) \
41 XF_CHECK(condition, retval, TAG, format, ##__VA_ARGS__)
42
43/* ==================== [Global Functions] ================================== */
44
49
51{
53 XF_HAL_ADC_CHECK(!dev, XF_ERR_NOT_FOUND, "adc init failed!");
54
55 return XF_OK;
56}
57
59{
60 xf_err_t err = XF_OK;
61 UNUSED(err);
62
64 XF_HAL_ADC_CHECK(!dev, XF_ERR_UNINIT, "adc is not init!");
65
66 err = xf_hal_driver_close(dev);
67 XF_HAL_ADC_CHECK(err, err, "adc deinit failed!");
68
69 return XF_OK;
70}
71
73{
74 xf_err_t err = XF_OK;
75 UNUSED(err);
76
78 xf_hal_adc_t *dev_adc = (xf_hal_adc_t *)dev;
79 XF_HAL_ADC_CHECK(!dev_adc, XF_ERR_UNINIT, "adc is not init!");
80
81#if XF_HAL_LOCK_IS_ENABLE
82 xf_lock_lock(dev_adc->dev.mutex);
83#endif
84
85 dev_adc->config.enable = true;
86
87#if XF_HAL_LOCK_IS_ENABLE
88 xf_lock_unlock(dev_adc->dev.mutex);
89#endif
90
92 XF_HAL_ADC_CHECK(err, err, "enable failed!");
93
94 return XF_OK;
95}
96
98{
99 xf_err_t err = XF_OK;
100 UNUSED(err);
101
103 xf_hal_adc_t *dev_adc = (xf_hal_adc_t *)dev;
104 XF_HAL_ADC_CHECK(!dev_adc, XF_ERR_UNINIT, "adc is not init!");
105
106#if XF_HAL_LOCK_IS_ENABLE
107 xf_lock_lock(dev_adc->dev.mutex);
108#endif
109
110 dev_adc->config.enable = false;
111
112#if XF_HAL_LOCK_IS_ENABLE
113 xf_lock_unlock(dev_adc->dev.mutex);
114#endif
115
116 err = xf_hal_driver_ioctl(dev, XF_HAL_ADC_CMD_ENABLE, &dev_adc->config);
117 XF_HAL_ADC_CHECK(err, err, "disable failed!");
118
119 return XF_OK;
120}
121
123{
124 XF_HAL_ADC_CHECK(resolution > 32, XF_ERR_INVALID_ARG, "adc resolution must less than 32");
125
126 xf_err_t err = XF_OK;
127 UNUSED(err);
128
130 xf_hal_adc_t *dev_adc = (xf_hal_adc_t *)dev;
131 XF_HAL_ADC_CHECK(!dev_adc, XF_ERR_UNINIT, "adc is not init!");
132
133#if XF_HAL_LOCK_IS_ENABLE
134 xf_lock_lock(dev_adc->dev.mutex);
135#endif
136
137 dev_adc->config.resolution = resolution;
138
139#if XF_HAL_LOCK_IS_ENABLE
140 xf_lock_unlock(dev_adc->dev.mutex);
141#endif
142
144 XF_HAL_ADC_CHECK(err, err, "set resolution failed!");
145
146 return XF_OK;
147}
148
150{
151 XF_HAL_ADC_CHECK(sample_rate > 10000000, XF_ERR_INVALID_ARG, "adc sample_rate must less than 10000000");
152
153 xf_err_t err = XF_OK;
154 UNUSED(err);
155
157 xf_hal_adc_t *dev_adc = (xf_hal_adc_t *)dev;
158 XF_HAL_ADC_CHECK(!dev_adc, XF_ERR_UNINIT, "adc is not init!");
159
160#if XF_HAL_LOCK_IS_ENABLE
161 xf_lock_lock(dev_adc->dev.mutex);
162#endif
163
164 dev_adc->config.sample_rate = sample_rate;
165
166#if XF_HAL_LOCK_IS_ENABLE
167 xf_lock_unlock(dev_adc->dev.mutex);
168#endif
169
171 XF_HAL_ADC_CHECK(err, err, "set samle rate failed!");
172
173 return XF_OK;
174}
175
177{
178 xf_err_t err = XF_OK;
179 UNUSED(err);
180 uint32_t data = 0;
181
183 xf_hal_adc_t *dev_adc = (xf_hal_adc_t *)dev;
184 XF_HAL_ADC_CHECK(!dev_adc, XF_ERR_UNINIT, "adc is not init!");
185
186 err = xf_hal_driver_read(dev, (void *)&data, 1);
187 XF_HAL_ADC_CHECK(err < XF_OK, 0, "adc read failed!:%d!", -err);
188
189 return data;
190}
191
192/* ==================== [Static Functions] ================================== */
193
195{
196 xf_err_t err = XF_OK;
197 UNUSED(err);
198 xf_hal_dev_t *dev = NULL;
199 xf_hal_adc_t *dev_adc = (xf_hal_adc_t *)xf_malloc(sizeof(xf_hal_adc_t));
200 XF_ASSERT(dev_adc, NULL, TAG, "memory alloc failed!");
201
202 dev = (xf_hal_dev_t *)dev_adc;
203
204 err = xf_hal_driver_open(dev, XF_HAL_ADC_TYPE, adc_num);
205
206 if (err) {
207 XF_LOGE(TAG, "open failed!");
208 xf_free(dev);
209 dev = NULL;
210 }
211
212 return dev;
213}
214
215#endif
xf_err_t xf_hal_adc_init(xf_adc_num_t adc_num)
adc 初始化函数。
Definition xf_hal_adc.c:50
xf_err_t xf_hal_adc_deinit(xf_adc_num_t adc_num)
adc 反初始化函数。
Definition xf_hal_adc.c:58
xf_err_t xf_hal_adc_set_sample_rate(xf_adc_num_t adc_num, uint32_t sample_rate)
adc 设置采样率。
Definition xf_hal_adc.c:149
xf_err_t xf_hal_adc_enable(xf_adc_num_t adc_num)
adc 启用函数。
Definition xf_hal_adc.c:72
uint32_t xf_hal_adc_read_raw(xf_adc_num_t adc_num)
adc读取的原始值,最大值为 2^resolution
Definition xf_hal_adc.c:176
uint32_t xf_adc_num_t
adc 序号。
Definition xf_hal_adc.h:41
xf_err_t xf_hal_adc_set_resolution(xf_adc_num_t adc_num, uint8_t resolution)
adc 设置分辨率。
Definition xf_hal_adc.c:122
xf_err_t xf_hal_adc_disable(xf_adc_num_t adc_num)
adc 禁用函数。
Definition xf_hal_adc.c:97
@ XF_HAL_ADC_CMD_SAMPLE_RATE
Definition xf_hal_adc.h:55
@ XF_HAL_ADC_CMD_RESOLUTION
Definition xf_hal_adc.h:54
@ XF_HAL_ADC_CMD_ENABLE
Definition xf_hal_adc.h:53
#define XF_ASSERT(condition, retval, tag, format,...)
xfusion 断言宏(条件 不成立 时则输出日志后返回)。
Definition xf_check.h:150
int32_t xf_err_t
整形错误类型。 错误码具体值见 xf_err_code_t.
Definition xf_err.h:69
@ XF_ERR_INVALID_ARG
Definition xf_err.h:46
@ XF_OK
Definition xf_err.h:43
@ XF_ERR_NOT_FOUND
Definition xf_err.h:50
@ XF_ERR_UNINIT
Definition xf_err.h:54
int xf_lock_unlock(xf_lock_t lock)
解锁.
Definition xf_lock.c:88
int xf_lock_lock(xf_lock_t lock)
锁定直至成功.
Definition xf_lock.c:72
#define xf_malloc(x)
Definition xf_stdlib.h:38
#define xf_free(x)
Definition xf_stdlib.h:39
adc 配置结构体。
Definition xf_hal_adc.h:67
xf_hal_dev_t dev
Definition xf_hal_adc.c:28
xf_hal_adc_config_t config
Definition xf_hal_adc.c:29
#define XF_HAL_ADC_CHECK(condition, retval, format,...)
Definition xf_hal_adc.c:40
#define XF_HAL_ADC_TYPE
Definition xf_hal_adc.c:23
struct _xf_hal_adc_t xf_hal_adc_t
static xf_hal_dev_t * adc_constructor(xf_adc_num_t adc_num)
Definition xf_hal_adc.c:194
xf_err_t xf_hal_adc_register(const xf_driver_ops_t *driver_ops)
adc 设备注册。
Definition xf_hal_adc.c:45
#define TAG
Definition xf_hal_adc.c:22
xf_hal 的 adc(模数转换) 设备抽象。
xf_err_t xf_hal_driver_close(xf_hal_dev_t *dev)
Definition xf_hal_dev.c:192
int xf_hal_driver_read(xf_hal_dev_t *dev, void *buf, size_t count)
Definition xf_hal_dev.c:168
xf_err_t xf_hal_driver_ioctl(xf_hal_dev_t *dev, uint32_t cmd, void *config)
Definition xf_hal_dev.c:154
xf_err_t xf_hal_driver_open(xf_hal_dev_t *dev, xf_hal_type_t type, uint32_t id)
Definition xf_hal_dev.c:118
xf_hal_dev_t * xf_hal_device_find(xf_hal_type_t type, uint32_t id)
Definition xf_hal_dev.c:238
xf_err_t xf_hal_driver_register(xf_hal_type_t type, xf_hal_flag_t flag, xf_hal_dev_create_t constructor, const xf_driver_ops_t *driver_ops)
Definition xf_hal_dev.c:44
xf_hal_dev_t * xf_hal_driver_create(xf_hal_type_t type, uint32_t id)
Definition xf_hal_dev.c:93
@ XF_HAL_FLAG_ONLY_READ
Definition xf_hal_dev.h:52
#define XF_LOGE(tag, format,...)
#define UNUSED(_x)