|
|
@@ -1,5 +1,5 @@
|
|
|
/*
|
|
|
- * Copyright (c) 2006-2021, RT-Thread Development Team
|
|
|
+ * Copyright (c) 2006-2024, RT-Thread Development Team
|
|
|
*
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
*
|
|
|
@@ -11,7 +11,7 @@
|
|
|
#include "drv_config.h"
|
|
|
#ifdef RT_USING_ADC
|
|
|
|
|
|
-// #define DRV_DEBUG
|
|
|
+#define DRV_DEBUG
|
|
|
#define DBG_TAG "drv.adc"
|
|
|
#ifdef DRV_DEBUG
|
|
|
#define DBG_LVL DBG_LOG
|
|
|
@@ -22,24 +22,25 @@
|
|
|
|
|
|
struct ra_adc_map ra_adc[] =
|
|
|
{
|
|
|
-#if defined(BSP_USING_ADC0)
|
|
|
- {'0', &g_adc0_cfg, &g_adc0_ctrl, &g_adc0_channel_cfg},
|
|
|
+#ifdef BSP_USING_ADC0
|
|
|
+ {
|
|
|
+ .device_name = "adc0",
|
|
|
+ .g_cfg = &g_adc0_cfg,
|
|
|
+ .g_ctrl = &g_adc0_ctrl,
|
|
|
+ .g_channel_cfg = &g_adc0_channel_cfg,
|
|
|
+ },
|
|
|
#endif
|
|
|
-
|
|
|
-#if defined(BSP_USING_ADC1)
|
|
|
- {'1', &g_adc1_cfg, &g_adc1_ctrl, &g_adc1_channel_cfg},
|
|
|
+#ifdef BSP_USING_ADC1
|
|
|
+ {
|
|
|
+ .device_name = "adc1",
|
|
|
+ .g_cfg = &g_adc1_cfg,
|
|
|
+ .g_ctrl = &g_adc1_ctrl,
|
|
|
+ .g_channel_cfg = &g_adc1_channel_cfg,
|
|
|
+ },
|
|
|
#endif
|
|
|
};
|
|
|
|
|
|
-#if defined(BSP_USING_ADC0)
|
|
|
-struct rt_adc_device adc0_device;
|
|
|
-struct ra_dev _ra_adc0_device = {.ra_adc_device_t = &adc0_device, .ra_adc_dev = &ra_adc[0]};
|
|
|
-#endif
|
|
|
-
|
|
|
-#if defined(BSP_USING_ADC1)
|
|
|
-struct rt_adc_device adc1_device;
|
|
|
-struct ra_dev _ra_adc1_device = {.ra_adc_device_t = &adc1_device, .ra_adc_dev = &ra_adc[1]};
|
|
|
-#endif
|
|
|
+static struct rt_adc_dev adc_obj[sizeof(ra_adc) / sizeof(ra_adc[0])] = {0};
|
|
|
|
|
|
static rt_err_t ra_adc_enabled(struct rt_adc_device *device, rt_int8_t channel, rt_bool_t enabled)
|
|
|
{
|
|
|
@@ -50,7 +51,7 @@ static rt_err_t ra_adc_enabled(struct rt_adc_device *device, rt_int8_t channel,
|
|
|
{
|
|
|
if (FSP_SUCCESS != R_ADC_ScanStart((adc_ctrl_t *)adc->g_ctrl))
|
|
|
{
|
|
|
- LOG_E("start adc%c failed.", adc->name);
|
|
|
+ LOG_E("start %s failed.", adc->device_name);
|
|
|
return -RT_ERROR;
|
|
|
}
|
|
|
}
|
|
|
@@ -59,7 +60,7 @@ static rt_err_t ra_adc_enabled(struct rt_adc_device *device, rt_int8_t channel,
|
|
|
/**< stop adc*/
|
|
|
if (FSP_SUCCESS != R_ADC_ScanStop((adc_ctrl_t *)adc->g_ctrl))
|
|
|
{
|
|
|
- LOG_E("stop adc%c failed.", adc->name);
|
|
|
+ LOG_E("stop %s failed.", adc->device_name);
|
|
|
return -RT_ERROR;
|
|
|
}
|
|
|
}
|
|
|
@@ -69,10 +70,10 @@ static rt_err_t ra_adc_enabled(struct rt_adc_device *device, rt_int8_t channel,
|
|
|
rt_err_t ra_adc_close(struct rt_adc_device *device)
|
|
|
{
|
|
|
RT_ASSERT(device != RT_NULL);
|
|
|
- struct ra_adc_map *adc = (struct ra_adc_map *)(struct ra_adc_map *)device->parent.user_data;
|
|
|
+ struct ra_adc_map *adc = (struct ra_adc_map *)device->parent.user_data;
|
|
|
if (FSP_SUCCESS != R_ADC_Close((adc_ctrl_t *)adc->g_ctrl))
|
|
|
{
|
|
|
- LOG_E("close adc%c failed.", adc->name);
|
|
|
+ LOG_E("close %s failed.", adc->device_name);
|
|
|
return -RT_ERROR;
|
|
|
}
|
|
|
return RT_EOK;
|
|
|
@@ -98,35 +99,32 @@ static const struct rt_adc_ops ra_adc_ops =
|
|
|
|
|
|
static int ra_adc_init(void)
|
|
|
{
|
|
|
-#if defined(BSP_USING_ADC0)
|
|
|
- R_ADC_Open((adc_ctrl_t *)_ra_adc0_device.ra_adc_dev->g_ctrl,
|
|
|
- (adc_cfg_t const * const)_ra_adc0_device.ra_adc_dev->g_cfg);
|
|
|
-
|
|
|
- R_ADC_ScanCfg((adc_ctrl_t *)_ra_adc0_device.ra_adc_dev->g_ctrl,
|
|
|
- (adc_cfg_t const * const)_ra_adc0_device.ra_adc_dev->g_channel_cfg);
|
|
|
+ rt_err_t result = 0;
|
|
|
+ rt_size_t obj_num = sizeof(adc_obj) / sizeof(struct rt_adc_dev);
|
|
|
|
|
|
- if (RT_EOK != rt_hw_adc_register(_ra_adc0_device.ra_adc_device_t, "adc0", &ra_adc_ops, (void *)_ra_adc0_device.ra_adc_dev))
|
|
|
+ for (int i = 0; i < obj_num; i++)
|
|
|
{
|
|
|
- LOG_E("adc0 register failed");
|
|
|
- return -RT_ERROR;
|
|
|
- }
|
|
|
-#endif
|
|
|
-
|
|
|
-#if defined(BSP_USING_ADC1)
|
|
|
- R_ADC_Open((adc_ctrl_t *)_ra_adc1_device.ra_adc_dev->g_ctrl,
|
|
|
- (adc_cfg_t const * const)_ra_adc1_device.ra_adc_dev->g_cfg);
|
|
|
+ /* init ADC object */
|
|
|
+ result = R_ADC_Open((adc_ctrl_t *)ra_adc[i].g_ctrl, ra_adc[i].g_cfg);
|
|
|
|
|
|
- R_ADC_ScanCfg((adc_ctrl_t *)_ra_adc1_device.ra_adc_dev->g_ctrl,
|
|
|
- (adc_cfg_t const * const)_ra_adc1_device.ra_adc_dev->g_channel_cfg);
|
|
|
+ result = R_ADC_ScanCfg((adc_ctrl_t *)ra_adc[i].g_ctrl, ra_adc[i].g_channel_cfg);
|
|
|
|
|
|
- if (RT_EOK != rt_hw_adc_register(_ra_adc1_device.ra_adc_device_t, "adc1", &ra_adc_ops, (void *)_ra_adc1_device.ra_adc_dev))
|
|
|
- {
|
|
|
- LOG_E("adc1 register failed");
|
|
|
- return -RT_ERROR;
|
|
|
+ /* register ADC device */
|
|
|
+ if(rt_hw_adc_register(&adc_obj[i].adc_device,
|
|
|
+ ra_adc[i].device_name,
|
|
|
+ &ra_adc_ops,
|
|
|
+ &ra_adc[i]) == RT_EOK)
|
|
|
+ {
|
|
|
+ LOG_D("%s init success", ra_adc[i].device_name);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LOG_E("%s register failed", ra_adc[i].device_name);
|
|
|
+ result = -RT_ERROR;
|
|
|
+ }
|
|
|
+ RT_ASSERT(result == RT_EOK);
|
|
|
}
|
|
|
-#endif
|
|
|
-
|
|
|
return RT_EOK;
|
|
|
}
|
|
|
-INIT_BOARD_EXPORT(ra_adc_init);
|
|
|
+INIT_DEVICE_EXPORT(ra_adc_init);
|
|
|
#endif
|