mirror of https://github.com/ARMmbed/mbed-os.git
analogout: STM32: modified analogout_free api
removed hardcoded pins, implemented multi channel check implemented DAC_2 initialization for H7 board Added #if defined DAC_CHANNEL_2pull/14864/head
parent
d83494f54b
commit
eb06d5eb59
|
@ -23,6 +23,11 @@
|
|||
#include "mbed_error.h"
|
||||
#include "PeripheralPins.h"
|
||||
|
||||
static int channel1_used = 0;
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
static int channel2_used = 0;
|
||||
#endif
|
||||
|
||||
void analogout_init(dac_t *obj, PinName pin)
|
||||
{
|
||||
DAC_ChannelConfTypeDef sConfig = {0};
|
||||
|
@ -72,6 +77,15 @@ void analogout_init(dac_t *obj, PinName pin)
|
|||
if (HAL_DAC_ConfigChannel(&obj->handle, &sConfig, obj->channel) != HAL_OK) {
|
||||
error("HAL_DAC_ConfigChannel failed");
|
||||
}
|
||||
|
||||
if (obj->channel == DAC_CHANNEL_1) {
|
||||
channel1_used = 1;
|
||||
}
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
if (obj->channel == DAC_CHANNEL_2) {
|
||||
channel2_used = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
analogout_write_u16(obj, 0);
|
||||
HAL_DAC_Start(&obj->handle, obj->channel);
|
||||
|
@ -79,10 +93,24 @@ void analogout_init(dac_t *obj, PinName pin)
|
|||
|
||||
void analogout_free(dac_t *obj)
|
||||
{
|
||||
// Reset DAC and disable clock
|
||||
__HAL_RCC_DAC1_FORCE_RESET();
|
||||
__HAL_RCC_DAC1_RELEASE_RESET();
|
||||
__HAL_RCC_DAC1_CLK_DISABLE();
|
||||
if (obj->channel == DAC_CHANNEL_1) {
|
||||
channel1_used = 0;
|
||||
}
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
if (obj->channel == DAC_CHANNEL_2) {
|
||||
channel2_used = 0;
|
||||
}
|
||||
#endif
|
||||
if ((channel1_used == 0)
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
&& (channel2_used == 0)
|
||||
#endif
|
||||
) {
|
||||
// Reset DAC and disable clock
|
||||
__HAL_RCC_DAC1_FORCE_RESET();
|
||||
__HAL_RCC_DAC1_RELEASE_RESET();
|
||||
__HAL_RCC_DAC1_CLK_DISABLE();
|
||||
}
|
||||
|
||||
// Configure GPIO back to reset value
|
||||
pin_function(obj->pin, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0));
|
||||
|
|
|
@ -35,6 +35,11 @@
|
|||
#include "mbed_error.h"
|
||||
#include "PeripheralPins.h"
|
||||
|
||||
static int channel1_used = 0;
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
static int channel2_used = 0;
|
||||
#endif
|
||||
|
||||
void analogout_init(dac_t *obj, PinName pin)
|
||||
{
|
||||
DAC_ChannelConfTypeDef sConfig = {0};
|
||||
|
@ -85,16 +90,38 @@ void analogout_init(dac_t *obj, PinName pin)
|
|||
error("HAL_DAC_ConfigChannel failed");
|
||||
}
|
||||
|
||||
if (obj->channel == DAC_CHANNEL_1) {
|
||||
channel1_used = 1;
|
||||
}
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
if (obj->channel == DAC_CHANNEL_2) {
|
||||
channel2_used = 1;
|
||||
}
|
||||
#endif
|
||||
analogout_write_u16(obj, 0);
|
||||
HAL_DAC_Start(&obj->handle, obj->channel);
|
||||
}
|
||||
|
||||
void analogout_free(dac_t *obj)
|
||||
{
|
||||
// Reset DAC and disable clock
|
||||
__HAL_RCC_DAC_FORCE_RESET();
|
||||
__HAL_RCC_DAC_RELEASE_RESET();
|
||||
__HAL_RCC_DAC_CLK_DISABLE();
|
||||
if (obj->channel == DAC_CHANNEL_1) {
|
||||
channel1_used = 0;
|
||||
}
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
if (obj->channel == DAC_CHANNEL_2) {
|
||||
channel2_used = 0;
|
||||
}
|
||||
#endif
|
||||
if ((channel1_used == 0)
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
&& (channel2_used == 0)
|
||||
#endif
|
||||
) {
|
||||
// Reset DAC and disable clock
|
||||
__HAL_RCC_DAC_FORCE_RESET();
|
||||
__HAL_RCC_DAC_RELEASE_RESET();
|
||||
__HAL_RCC_DAC_CLK_DISABLE();
|
||||
}
|
||||
|
||||
// Configure GPIO back to reset value
|
||||
pin_function(obj->pin, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0));
|
||||
|
|
|
@ -35,6 +35,11 @@
|
|||
#include "mbed_error.h"
|
||||
#include "PeripheralPins.h"
|
||||
|
||||
static int channel1_used = 0;
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
static int channel2_used = 0;
|
||||
#endif
|
||||
|
||||
void analogout_init(dac_t *obj, PinName pin)
|
||||
{
|
||||
DAC_ChannelConfTypeDef sConfig = {0};
|
||||
|
@ -84,6 +89,15 @@ void analogout_init(dac_t *obj, PinName pin)
|
|||
if (HAL_DAC_ConfigChannel(&obj->handle, &sConfig, obj->channel) != HAL_OK) {
|
||||
error("HAL_DAC_ConfigChannel failed");
|
||||
}
|
||||
|
||||
if (obj->channel == DAC_CHANNEL_1) {
|
||||
channel1_used = 1;
|
||||
}
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
if (obj->channel == DAC_CHANNEL_2) {
|
||||
channel2_used = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
analogout_write_u16(obj, 0);
|
||||
HAL_DAC_Start(&obj->handle, obj->channel);
|
||||
|
@ -91,10 +105,24 @@ void analogout_init(dac_t *obj, PinName pin)
|
|||
|
||||
void analogout_free(dac_t *obj)
|
||||
{
|
||||
// Reset DAC and disable clock
|
||||
__HAL_RCC_DAC_FORCE_RESET();
|
||||
__HAL_RCC_DAC_RELEASE_RESET();
|
||||
__HAL_RCC_DAC_CLK_DISABLE();
|
||||
if (obj->channel == DAC_CHANNEL_1) {
|
||||
channel1_used = 0;
|
||||
}
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
if (obj->channel == DAC_CHANNEL_2) {
|
||||
channel2_used = 0;
|
||||
}
|
||||
#endif
|
||||
if ((channel1_used == 0)
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
&& (channel2_used == 0)
|
||||
#endif
|
||||
) {
|
||||
// Reset DAC and disable clock
|
||||
__HAL_RCC_DAC_FORCE_RESET();
|
||||
__HAL_RCC_DAC_RELEASE_RESET();
|
||||
__HAL_RCC_DAC_CLK_DISABLE();
|
||||
}
|
||||
|
||||
// Configure GPIO back to reset value
|
||||
pin_function(obj->pin, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0));
|
||||
|
|
|
@ -36,8 +36,10 @@
|
|||
#include "PeripheralPins.h"
|
||||
|
||||
// These variables are used for the "free" function
|
||||
static int pa4_used = 0;
|
||||
static int pa5_used = 0;
|
||||
static int channel1_used = 0;
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
static int channel2_used = 0;
|
||||
#endif
|
||||
|
||||
#if STATIC_PINMAP_READY
|
||||
#define ANALOGOUT_INIT_DIRECT analogout_init_direct
|
||||
|
@ -108,14 +110,14 @@ static void _analogout_init_direct(dac_t *obj, const PinMap *pinmap)
|
|||
sConfig.DAC_OutputSwitch = DAC_OUTPUTSWITCH_ENABLE;
|
||||
#endif
|
||||
|
||||
if (pinmap->pin == PA_4) {
|
||||
pa4_used = 1;
|
||||
if (obj->channel == DAC_CHANNEL_1) {
|
||||
channel1_used = 1;
|
||||
}
|
||||
|
||||
if (pinmap->pin == PA_5) {
|
||||
pa5_used = 1;
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
if (obj->channel == DAC_CHANNEL_2) {
|
||||
channel2_used = 1;
|
||||
}
|
||||
|
||||
#endif
|
||||
if (HAL_DAC_ConfigChannel(&obj->handle, &sConfig, obj->channel) != HAL_OK) {
|
||||
error("HAL_DAC_ConfigChannel failed");
|
||||
}
|
||||
|
@ -137,21 +139,26 @@ void analogout_init(dac_t *obj, PinName pin)
|
|||
void analogout_free(dac_t *obj)
|
||||
{
|
||||
// Reset DAC and disable clock
|
||||
if (obj->pin == PA_4) {
|
||||
pa4_used = 0;
|
||||
if (obj->channel == DAC_CHANNEL_1) {
|
||||
channel1_used = 0;
|
||||
}
|
||||
if (obj->pin == PA_5) {
|
||||
pa5_used = 0;
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
if (obj->channel == DAC_CHANNEL_2) {
|
||||
channel2_used = 0;
|
||||
}
|
||||
|
||||
if ((pa4_used == 0) && (pa5_used == 0)) {
|
||||
#endif
|
||||
if ((channel1_used == 0)
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
&& (channel2_used == 0)
|
||||
#endif
|
||||
) {
|
||||
__HAL_RCC_DAC1_FORCE_RESET();
|
||||
__HAL_RCC_DAC1_RELEASE_RESET();
|
||||
__HAL_RCC_DAC1_CLK_DISABLE();
|
||||
}
|
||||
|
||||
#if defined(DAC2)
|
||||
if (obj->pin == PA_6) {
|
||||
if (obj->dac == DAC_2) {
|
||||
__HAL_RCC_DAC2_FORCE_RESET();
|
||||
__HAL_RCC_DAC2_RELEASE_RESET();
|
||||
__HAL_RCC_DAC2_CLK_DISABLE();
|
||||
|
|
|
@ -24,8 +24,10 @@
|
|||
#include "PeripheralPins.h"
|
||||
|
||||
// These variables are used for the "free" function
|
||||
static int pa4_used = 0;
|
||||
static int pa5_used = 0;
|
||||
static int channel1_used = 0;
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
static int channel2_used = 0;
|
||||
#endif
|
||||
|
||||
#if STATIC_PINMAP_READY
|
||||
#define ANALOGOUT_INIT_DIRECT analogout_init_direct
|
||||
|
@ -96,13 +98,14 @@ static void _analogout_init_direct(dac_t *obj, const PinMap *pinmap)
|
|||
sConfig.DAC_OutputSwitch = DAC_OUTPUTSWITCH_ENABLE;
|
||||
#endif
|
||||
|
||||
if (pinmap->pin == PA_4) {
|
||||
pa4_used = 1;
|
||||
if (obj->channel == DAC_CHANNEL_1) {
|
||||
channel1_used = 1;
|
||||
}
|
||||
|
||||
if (pinmap->pin == PA_5) {
|
||||
pa5_used = 1;
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
if (obj->channel == DAC_CHANNEL_2) {
|
||||
channel2_used = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (HAL_DAC_ConfigChannel(&obj->handle, &sConfig, obj->channel) != HAL_OK) {
|
||||
error("HAL_DAC_ConfigChannel failed");
|
||||
|
@ -125,21 +128,27 @@ void analogout_init(dac_t *obj, PinName pin)
|
|||
void analogout_free(dac_t *obj)
|
||||
{
|
||||
// Reset DAC and disable clock
|
||||
if (obj->pin == PA_4) {
|
||||
pa4_used = 0;
|
||||
if (obj->channel == DAC_CHANNEL_1) {
|
||||
channel1_used = 0;
|
||||
}
|
||||
if (obj->pin == PA_5) {
|
||||
pa5_used = 0;
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
if (obj->channel == DAC_CHANNEL_2) {
|
||||
channel2_used = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((pa4_used == 0) && (pa5_used == 0)) {
|
||||
if ((channel1_used == 0)
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
&& (channel2_used == 0)
|
||||
#endif
|
||||
) {
|
||||
__HAL_RCC_DAC1_FORCE_RESET();
|
||||
__HAL_RCC_DAC1_RELEASE_RESET();
|
||||
__HAL_RCC_DAC1_CLK_DISABLE();
|
||||
}
|
||||
|
||||
#if defined(DAC2)
|
||||
if (obj->pin == PA_6) {
|
||||
if (obj->dac == DAC_2) {
|
||||
__HAL_RCC_DAC2_FORCE_RESET();
|
||||
__HAL_RCC_DAC2_RELEASE_RESET();
|
||||
__HAL_RCC_DAC2_CLK_DISABLE();
|
||||
|
|
|
@ -57,7 +57,14 @@ void analogout_init(dac_t *obj, PinName pin)
|
|||
|
||||
__GPIOA_CLK_ENABLE();
|
||||
|
||||
__HAL_RCC_DAC12_CLK_ENABLE();
|
||||
if (obj->dac == DAC_1) {
|
||||
__HAL_RCC_DAC12_CLK_ENABLE();
|
||||
}
|
||||
#if defined(DAC2)
|
||||
if (obj->dac == DAC_2) {
|
||||
__HAL_RCC_DAC2_CLK_ENABLE();
|
||||
}
|
||||
#endif
|
||||
|
||||
obj->handle.Instance = DAC1;
|
||||
obj->handle.State = HAL_DAC_STATE_RESET;
|
||||
|
|
|
@ -25,7 +25,9 @@
|
|||
|
||||
// These variables are used for the "free" function
|
||||
static int channel1_used = 0;
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
static int channel2_used = 0;
|
||||
#endif
|
||||
|
||||
#if STATIC_PINMAP_READY
|
||||
#define ANALOGOUT_INIT_DIRECT analogout_init_direct
|
||||
|
@ -85,9 +87,12 @@ static void _analogout_init_direct(dac_t *obj, const PinMap *pinmap)
|
|||
|
||||
if (obj->channel == DAC_CHANNEL_1) {
|
||||
channel1_used = 1;
|
||||
} else {
|
||||
}
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
if (obj->channel == DAC_CHANNEL_2) {
|
||||
channel2_used = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
analogout_write_u16(obj, 0);
|
||||
HAL_DAC_Start(&obj->handle, obj->channel);
|
||||
|
@ -114,7 +119,11 @@ void analogout_free(dac_t *obj)
|
|||
channel2_used = 0;
|
||||
}
|
||||
#endif
|
||||
if ((channel1_used == 0) && (channel2_used == 0)) {
|
||||
if ((channel1_used == 0)
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
&& (channel2_used == 0)
|
||||
#endif
|
||||
) {
|
||||
__DAC_FORCE_RESET();
|
||||
__DAC_RELEASE_RESET();
|
||||
__DAC_CLK_DISABLE();
|
||||
|
|
|
@ -24,8 +24,10 @@
|
|||
#include "PeripheralPins.h"
|
||||
|
||||
// These variables are used for the "free" function
|
||||
static int pa4_used = 0;
|
||||
static int pa5_used = 0;
|
||||
static int channel1_used = 0;
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
static int channel2_used = 0;
|
||||
#endif
|
||||
|
||||
void analogout_init(dac_t *obj, PinName pin)
|
||||
{
|
||||
|
@ -70,12 +72,14 @@ void analogout_init(dac_t *obj, PinName pin)
|
|||
sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
|
||||
sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
|
||||
|
||||
if (pin == PA_4) {
|
||||
pa4_used = 1;
|
||||
} else { // PA_5
|
||||
pa5_used = 1;
|
||||
if (obj->channel == DAC_CHANNEL_1) {
|
||||
channel1_used = 1;
|
||||
}
|
||||
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
if (obj->channel == DAC_CHANNEL_2) {
|
||||
channel2_used = 1;
|
||||
}
|
||||
#endif
|
||||
if (HAL_DAC_ConfigChannel(&obj->handle, &sConfig, obj->channel) != HAL_OK) {
|
||||
error("Cannot configure DAC channel\n");
|
||||
}
|
||||
|
@ -87,13 +91,20 @@ void analogout_init(dac_t *obj, PinName pin)
|
|||
void analogout_free(dac_t *obj)
|
||||
{
|
||||
// Reset DAC and disable clock
|
||||
if (obj->pin == PA_4) {
|
||||
pa4_used = 0;
|
||||
if (obj->channel == DAC_CHANNEL_1) {
|
||||
channel1_used = 0;
|
||||
}
|
||||
if (obj->pin == PA_5) {
|
||||
pa5_used = 0;
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
if (obj->channel == DAC_CHANNEL_2) {
|
||||
channel2_used = 0;
|
||||
}
|
||||
if ((pa4_used == 0) && (pa5_used == 0)) {
|
||||
#endif
|
||||
|
||||
if ((channel1_used == 0)
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
&& (channel2_used == 0)
|
||||
#endif
|
||||
) {
|
||||
__DAC_FORCE_RESET();
|
||||
__DAC_RELEASE_RESET();
|
||||
__DAC_CLK_DISABLE();
|
||||
|
|
|
@ -28,7 +28,9 @@
|
|||
|
||||
// These variables are used for the "free" function
|
||||
static int channel1_used = 0;
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
static int channel2_used = 0;
|
||||
#endif
|
||||
|
||||
#if STATIC_PINMAP_READY
|
||||
#define ANALOGOUT_INIT_DIRECT analogout_init_direct
|
||||
|
@ -88,9 +90,12 @@ static void _analogout_init_direct(dac_t *obj, const PinMap *pinmap)
|
|||
|
||||
if (obj->channel == DAC_CHANNEL_1) {
|
||||
channel1_used = 1;
|
||||
} else { // channel 1 per default
|
||||
}
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
if (obj->channel == DAC_CHANNEL_2) {
|
||||
channel2_used = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (HAL_DAC_ConfigChannel(&obj->handle, &sConfig, obj->channel) != HAL_OK) {
|
||||
error("Cannot configure DAC channel\n");
|
||||
|
@ -125,7 +130,11 @@ void analogout_free(dac_t *obj)
|
|||
}
|
||||
#endif
|
||||
|
||||
if ((channel1_used == 0) && (channel2_used == 0)) {
|
||||
if ((channel1_used == 0)
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
&& (channel2_used == 0)
|
||||
#endif
|
||||
) {
|
||||
__HAL_RCC_DAC1_FORCE_RESET();
|
||||
__HAL_RCC_DAC1_RELEASE_RESET();
|
||||
__HAL_RCC_DAC1_CLK_DISABLE();
|
||||
|
|
|
@ -25,7 +25,9 @@
|
|||
|
||||
// These variables are used for the "free" function
|
||||
static int channel1_used = 0;
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
static int channel2_used = 0;
|
||||
#endif
|
||||
|
||||
#if STATIC_PINMAP_READY
|
||||
#define ANALOGOUT_INIT_DIRECT analogout_init_direct
|
||||
|
@ -85,9 +87,12 @@ static void _analogout_init_direct(dac_t *obj, const PinMap *pinmap)
|
|||
|
||||
if (obj->channel == DAC_CHANNEL_1) {
|
||||
channel1_used = 1;
|
||||
} else { // channel 1 per default
|
||||
}
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
if (obj->channel == DAC_CHANNEL_2) {
|
||||
channel2_used = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (HAL_DAC_ConfigChannel(&obj->handle, &sConfig, obj->channel) != HAL_OK) {
|
||||
error("Cannot configure DAC channel\n");
|
||||
|
@ -119,7 +124,11 @@ void analogout_free(dac_t *obj)
|
|||
}
|
||||
#endif
|
||||
|
||||
if ((channel1_used == 0) && (channel2_used == 0)) {
|
||||
if ((channel1_used == 0)
|
||||
#if defined(DAC_CHANNEL_2)
|
||||
&& (channel2_used == 0)
|
||||
#endif
|
||||
) {
|
||||
__HAL_RCC_DAC1_FORCE_RESET();
|
||||
__HAL_RCC_DAC1_RELEASE_RESET();
|
||||
__HAL_RCC_DAC1_CLK_DISABLE();
|
||||
|
|
Loading…
Reference in New Issue