1.新增ST-DAC驱动适配。
This commit is contained in:
163
bsp/st/driver/drv_dac.c
Normal file
163
bsp/st/driver/drv_dac.c
Normal file
@@ -0,0 +1,163 @@
|
||||
/*
|
||||
* @copyright (c) 2023-2024, MR Development Team
|
||||
*
|
||||
* @license SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* @date 2024-01-22 MacRsh First version
|
||||
*/
|
||||
|
||||
#include "drv_dac.h"
|
||||
|
||||
enum drv_dac_index
|
||||
{
|
||||
#ifdef MR_USING_DAC1
|
||||
DRV_INDEX_DAC1,
|
||||
#endif /* MR_USING_DAC1 */
|
||||
#ifdef MR_USING_DAC2
|
||||
DRV_INDEX_DAC2,
|
||||
#endif /* MR_USING_DAC2 */
|
||||
#ifdef MR_USING_DAC3
|
||||
DRV_INDEX_DAC3,
|
||||
#endif /* MR_USING_DAC3 */
|
||||
DRV_INDEX_DAC_MAX
|
||||
};
|
||||
|
||||
static const char *dac_name[] =
|
||||
{
|
||||
#ifdef MR_USING_DAC1
|
||||
"dac1",
|
||||
#endif /* MR_USING_DAC1 */
|
||||
#ifdef MR_USING_DAC2
|
||||
"dac2",
|
||||
#endif /* MR_USING_DAC2 */
|
||||
#ifdef MR_USING_DAC3
|
||||
"dac3",
|
||||
#endif /* MR_USING_DAC3 */
|
||||
};
|
||||
|
||||
static struct drv_dac_data dac_drv_data[] =
|
||||
{
|
||||
#ifdef MR_USING_DAC1
|
||||
{{0}, DAC1},
|
||||
#endif /* MR_USING_DAC1 */
|
||||
#ifdef MR_USING_DAC2
|
||||
{{0}, DAC2},
|
||||
#endif /* MR_USING_DAC2 */
|
||||
#ifdef MR_USING_DAC3
|
||||
{{0}, DAC3},
|
||||
#endif /* MR_USING_DAC3 */
|
||||
};
|
||||
|
||||
static struct drv_dac_channel_data dac_channel_drv_data[] = DRV_DAC_CHANNEL_CONFIG;
|
||||
|
||||
static struct mr_dac dac_dev[MR_ARRAY_NUM(dac_drv_data)];
|
||||
|
||||
static struct drv_dac_channel_data *drv_dac_get_channel_data(int channel)
|
||||
{
|
||||
if (channel >= MR_ARRAY_NUM(dac_channel_drv_data))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
return &dac_channel_drv_data[channel];
|
||||
}
|
||||
|
||||
static int drv_dac_configure(struct mr_dac *dac, int state)
|
||||
{
|
||||
struct drv_dac_data *dac_data = (struct drv_dac_data *)dac->dev.drv->data;
|
||||
dac_data->handle.Instance = dac_data->instance;
|
||||
|
||||
if (state == ENABLE)
|
||||
{
|
||||
/* Configure DAC */
|
||||
HAL_DAC_Init(&dac_data->handle);
|
||||
} else
|
||||
{
|
||||
/* Configure DAC */
|
||||
HAL_DAC_DeInit(&dac_data->handle);
|
||||
}
|
||||
return MR_EOK;
|
||||
}
|
||||
|
||||
static int drv_dac_channel_configure(struct mr_dac *dac, int channel, int state)
|
||||
{
|
||||
struct drv_dac_data *dac_data = (struct drv_dac_data *)dac->dev.drv->data;
|
||||
struct drv_dac_channel_data *dac_channel_data = drv_dac_get_channel_data(channel);
|
||||
DAC_ChannelConfTypeDef sConfig = {0};
|
||||
|
||||
/* Check channel is valid */
|
||||
if (dac_channel_data == NULL)
|
||||
{
|
||||
return MR_EINVAL;
|
||||
}
|
||||
|
||||
/* Configure Channel */
|
||||
sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
|
||||
sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE;
|
||||
HAL_DAC_ConfigChannel(&dac_data->handle, &sConfig, dac_channel_data->channel);
|
||||
if (state == ENABLE)
|
||||
{
|
||||
HAL_DAC_SetValue(&dac_data->handle, dac_channel_data->channel, DAC_ALIGN_12B_R, 0);
|
||||
HAL_DAC_Start(&dac_data->handle, dac_channel_data->channel);
|
||||
} else
|
||||
{
|
||||
HAL_DAC_Stop(&dac_data->handle, dac_channel_data->channel);
|
||||
}
|
||||
return MR_EOK;
|
||||
}
|
||||
|
||||
static void drv_dac_write(struct mr_dac *dac, int channel, uint32_t data)
|
||||
{
|
||||
struct drv_dac_data *dac_data = (struct drv_dac_data *)dac->dev.drv->data;
|
||||
struct drv_dac_channel_data *dac_channel_data = drv_dac_get_channel_data(channel);
|
||||
|
||||
/* Check channel is valid */
|
||||
if (dac_channel_data == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Write data */
|
||||
HAL_DAC_SetValue(&dac_data->handle, dac_channel_data->channel, DAC_ALIGN_12B_R, (data & 0xFFF));
|
||||
}
|
||||
|
||||
static struct mr_dac_ops dac_drv_ops =
|
||||
{
|
||||
drv_dac_configure,
|
||||
drv_dac_channel_configure,
|
||||
drv_dac_write,
|
||||
};
|
||||
|
||||
static struct mr_drv dac_drv[] =
|
||||
{
|
||||
#ifdef MR_USING_DAC1
|
||||
{
|
||||
Mr_Drv_Type_DAC,
|
||||
&dac_drv_ops,
|
||||
&dac_drv_data[DRV_INDEX_DAC1],
|
||||
},
|
||||
#endif /* MR_USING_DAC1 */
|
||||
#ifdef MR_USING_DAC2
|
||||
{
|
||||
Mr_Drv_Type_DAC,
|
||||
&dac_drv_ops,
|
||||
&dac_drv_data[DRV_INDEX_DAC2],
|
||||
}
|
||||
#endif /* MR_USING_DAC2 */
|
||||
#ifdef MR_USING_DAC3
|
||||
{
|
||||
Mr_Drv_Type_DAC,
|
||||
&dac_drv_ops,
|
||||
&dac_drv_data[DRV_INDEX_DAC3],
|
||||
}
|
||||
#endif /* MR_USING_DAC3 */
|
||||
};
|
||||
|
||||
int drv_dac_init(void)
|
||||
{
|
||||
for (size_t i = 0; i < MR_ARRAY_NUM(dac_dev); i++)
|
||||
{
|
||||
mr_dac_register(&dac_dev[i], dac_name[i], &dac_drv[i]);
|
||||
}
|
||||
return MR_EOK;
|
||||
}
|
||||
MR_INIT_DRV_EXPORT(drv_dac_init);
|
||||
30
bsp/st/driver/drv_dac.h
Normal file
30
bsp/st/driver/drv_dac.h
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* @copyright (c) 2023-2024, MR Development Team
|
||||
*
|
||||
* @license SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* @date 2024-01-22 MacRsh First version
|
||||
*/
|
||||
|
||||
#ifndef _DRV_DAC_H_
|
||||
#define _DRV_DAC_H_
|
||||
|
||||
#include "include/device/mr_dac.h"
|
||||
#include "mr_board.h"
|
||||
|
||||
#ifdef MR_USING_DAC
|
||||
|
||||
struct drv_dac_data
|
||||
{
|
||||
DAC_HandleTypeDef handle;
|
||||
DAC_TypeDef *instance;
|
||||
};
|
||||
|
||||
struct drv_dac_channel_data
|
||||
{
|
||||
uint32_t channel;
|
||||
};
|
||||
|
||||
#endif /* MR_USING_DAC */
|
||||
|
||||
#endif /* _DRV_DAC_H_ */
|
||||
@@ -14,6 +14,12 @@ menu "Driver configure"
|
||||
default n
|
||||
endmenu
|
||||
|
||||
menu "DAC"
|
||||
config MR_USING_DAC1
|
||||
bool "Enable DAC1 driver"
|
||||
default n
|
||||
endmenu
|
||||
|
||||
menu "PWM"
|
||||
config MR_USING_PWM1
|
||||
bool "Enable PWM1 driver"
|
||||
|
||||
@@ -15,26 +15,33 @@ extern "C" {
|
||||
|
||||
#include "stm32f1xx.h"
|
||||
|
||||
#define DRV_ADC_CHANNEL_CONFIG \
|
||||
{ \
|
||||
{ADC_CHANNEL_0}, \
|
||||
{ADC_CHANNEL_1}, \
|
||||
{ADC_CHANNEL_2}, \
|
||||
{ADC_CHANNEL_3}, \
|
||||
{ADC_CHANNEL_4}, \
|
||||
{ADC_CHANNEL_5}, \
|
||||
{ADC_CHANNEL_6}, \
|
||||
{ADC_CHANNEL_7}, \
|
||||
{ADC_CHANNEL_8}, \
|
||||
{ADC_CHANNEL_9}, \
|
||||
{ADC_CHANNEL_10}, \
|
||||
{ADC_CHANNEL_11}, \
|
||||
{ADC_CHANNEL_12}, \
|
||||
{ADC_CHANNEL_13}, \
|
||||
{ADC_CHANNEL_14}, \
|
||||
{ADC_CHANNEL_15}, \
|
||||
{ADC_CHANNEL_16}, \
|
||||
{ADC_CHANNEL_17}, \
|
||||
#define DRV_ADC_CHANNEL_CONFIG \
|
||||
{ \
|
||||
{ADC_CHANNEL_0}, \
|
||||
{ADC_CHANNEL_1}, \
|
||||
{ADC_CHANNEL_2}, \
|
||||
{ADC_CHANNEL_3}, \
|
||||
{ADC_CHANNEL_4}, \
|
||||
{ADC_CHANNEL_5}, \
|
||||
{ADC_CHANNEL_6}, \
|
||||
{ADC_CHANNEL_7}, \
|
||||
{ADC_CHANNEL_8}, \
|
||||
{ADC_CHANNEL_9}, \
|
||||
{ADC_CHANNEL_10}, \
|
||||
{ADC_CHANNEL_11}, \
|
||||
{ADC_CHANNEL_12}, \
|
||||
{ADC_CHANNEL_13}, \
|
||||
{ADC_CHANNEL_14}, \
|
||||
{ADC_CHANNEL_15}, \
|
||||
{ADC_CHANNEL_16}, \
|
||||
{ADC_CHANNEL_17}, \
|
||||
}
|
||||
|
||||
#define DRV_DAC_CHANNEL_CONFIG \
|
||||
{ \
|
||||
{NULL}, \
|
||||
{DAC_CHANNEL_1}, \
|
||||
{DAC_CHANNEL_2}, \
|
||||
}
|
||||
|
||||
#define DRV_PIN_IRQ_MAP_CONFIG \
|
||||
|
||||
@@ -14,6 +14,12 @@ menu "Driver configure"
|
||||
default n
|
||||
endmenu
|
||||
|
||||
menu "DAC"
|
||||
config MR_USING_DAC1
|
||||
bool "Enable DAC1 driver"
|
||||
default n
|
||||
endmenu
|
||||
|
||||
menu "PWM"
|
||||
config MR_USING_PWM1
|
||||
bool "Enable PWM1 driver"
|
||||
|
||||
@@ -15,26 +15,33 @@ extern "C" {
|
||||
|
||||
#include "stm32f4xx.h"
|
||||
|
||||
#define DRV_ADC_CHANNEL_CONFIG \
|
||||
{ \
|
||||
{ADC_CHANNEL_0}, \
|
||||
{ADC_CHANNEL_1}, \
|
||||
{ADC_CHANNEL_2}, \
|
||||
{ADC_CHANNEL_3}, \
|
||||
{ADC_CHANNEL_4}, \
|
||||
{ADC_CHANNEL_5}, \
|
||||
{ADC_CHANNEL_6}, \
|
||||
{ADC_CHANNEL_7}, \
|
||||
{ADC_CHANNEL_8}, \
|
||||
{ADC_CHANNEL_9}, \
|
||||
{ADC_CHANNEL_10}, \
|
||||
{ADC_CHANNEL_11}, \
|
||||
{ADC_CHANNEL_12}, \
|
||||
{ADC_CHANNEL_13}, \
|
||||
{ADC_CHANNEL_14}, \
|
||||
{ADC_CHANNEL_15}, \
|
||||
{ADC_CHANNEL_16}, \
|
||||
{ADC_CHANNEL_17}, \
|
||||
#define DRV_ADC_CHANNEL_CONFIG \
|
||||
{ \
|
||||
{ADC_CHANNEL_0}, \
|
||||
{ADC_CHANNEL_1}, \
|
||||
{ADC_CHANNEL_2}, \
|
||||
{ADC_CHANNEL_3}, \
|
||||
{ADC_CHANNEL_4}, \
|
||||
{ADC_CHANNEL_5}, \
|
||||
{ADC_CHANNEL_6}, \
|
||||
{ADC_CHANNEL_7}, \
|
||||
{ADC_CHANNEL_8}, \
|
||||
{ADC_CHANNEL_9}, \
|
||||
{ADC_CHANNEL_10}, \
|
||||
{ADC_CHANNEL_11}, \
|
||||
{ADC_CHANNEL_12}, \
|
||||
{ADC_CHANNEL_13}, \
|
||||
{ADC_CHANNEL_14}, \
|
||||
{ADC_CHANNEL_15}, \
|
||||
{ADC_CHANNEL_16}, \
|
||||
{ADC_CHANNEL_17}, \
|
||||
}
|
||||
|
||||
#define DRV_DAC_CHANNEL_CONFIG \
|
||||
{ \
|
||||
{NULL}, \
|
||||
{DAC_CHANNEL_1}, \
|
||||
{DAC_CHANNEL_2}, \
|
||||
}
|
||||
|
||||
#define DRV_PIN_IRQ_MAP_CONFIG \
|
||||
|
||||
@@ -15,26 +15,26 @@ extern "C" {
|
||||
|
||||
#include "stm32f4xx.h"
|
||||
|
||||
#define DRV_ADC_CHANNEL_CONFIG \
|
||||
{ \
|
||||
{ADC_CHANNEL_0}, \
|
||||
{ADC_CHANNEL_1}, \
|
||||
{ADC_CHANNEL_2}, \
|
||||
{ADC_CHANNEL_3}, \
|
||||
{ADC_CHANNEL_4}, \
|
||||
{ADC_CHANNEL_5}, \
|
||||
{ADC_CHANNEL_6}, \
|
||||
{ADC_CHANNEL_7}, \
|
||||
{ADC_CHANNEL_8}, \
|
||||
{ADC_CHANNEL_9}, \
|
||||
{ADC_CHANNEL_10}, \
|
||||
{ADC_CHANNEL_11}, \
|
||||
{ADC_CHANNEL_12}, \
|
||||
{ADC_CHANNEL_13}, \
|
||||
{ADC_CHANNEL_14}, \
|
||||
{ADC_CHANNEL_15}, \
|
||||
{ADC_CHANNEL_16}, \
|
||||
{ADC_CHANNEL_17}, \
|
||||
#define DRV_ADC_CHANNEL_CONFIG \
|
||||
{ \
|
||||
{ADC_CHANNEL_0}, \
|
||||
{ADC_CHANNEL_1}, \
|
||||
{ADC_CHANNEL_2}, \
|
||||
{ADC_CHANNEL_3}, \
|
||||
{ADC_CHANNEL_4}, \
|
||||
{ADC_CHANNEL_5}, \
|
||||
{ADC_CHANNEL_6}, \
|
||||
{ADC_CHANNEL_7}, \
|
||||
{ADC_CHANNEL_8}, \
|
||||
{ADC_CHANNEL_9}, \
|
||||
{ADC_CHANNEL_10}, \
|
||||
{ADC_CHANNEL_11}, \
|
||||
{ADC_CHANNEL_12}, \
|
||||
{ADC_CHANNEL_13}, \
|
||||
{ADC_CHANNEL_14}, \
|
||||
{ADC_CHANNEL_15}, \
|
||||
{ADC_CHANNEL_16}, \
|
||||
{ADC_CHANNEL_17}, \
|
||||
}
|
||||
|
||||
#define DRV_PIN_IRQ_MAP_CONFIG \
|
||||
|
||||
Reference in New Issue
Block a user