Skip to content

Commit 775c448

Browse files
authored
Merge pull request #14864 from AnishKumarHCL/analogout_free_code_alignment
analogout: STM32: modified analogout_free api
2 parents 4e121a7 + eb06d5e commit 775c448

File tree

10 files changed

+203
-59
lines changed

10 files changed

+203
-59
lines changed

targets/TARGET_STM/TARGET_STM32F0/analogout_device.c

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323
#include "mbed_error.h"
2424
#include "PeripheralPins.h"
2525

26+
static int channel1_used = 0;
27+
#if defined(DAC_CHANNEL_2)
28+
static int channel2_used = 0;
29+
#endif
30+
2631
void analogout_init(dac_t *obj, PinName pin)
2732
{
2833
DAC_ChannelConfTypeDef sConfig = {0};
@@ -72,17 +77,40 @@ void analogout_init(dac_t *obj, PinName pin)
7277
if (HAL_DAC_ConfigChannel(&obj->handle, &sConfig, obj->channel) != HAL_OK) {
7378
error("HAL_DAC_ConfigChannel failed");
7479
}
80+
81+
if (obj->channel == DAC_CHANNEL_1) {
82+
channel1_used = 1;
83+
}
84+
#if defined(DAC_CHANNEL_2)
85+
if (obj->channel == DAC_CHANNEL_2) {
86+
channel2_used = 1;
87+
}
88+
#endif
7589

7690
analogout_write_u16(obj, 0);
7791
HAL_DAC_Start(&obj->handle, obj->channel);
7892
}
7993

8094
void analogout_free(dac_t *obj)
8195
{
82-
// Reset DAC and disable clock
83-
__HAL_RCC_DAC1_FORCE_RESET();
84-
__HAL_RCC_DAC1_RELEASE_RESET();
85-
__HAL_RCC_DAC1_CLK_DISABLE();
96+
if (obj->channel == DAC_CHANNEL_1) {
97+
channel1_used = 0;
98+
}
99+
#if defined(DAC_CHANNEL_2)
100+
if (obj->channel == DAC_CHANNEL_2) {
101+
channel2_used = 0;
102+
}
103+
#endif
104+
if ((channel1_used == 0)
105+
#if defined(DAC_CHANNEL_2)
106+
&& (channel2_used == 0)
107+
#endif
108+
) {
109+
// Reset DAC and disable clock
110+
__HAL_RCC_DAC1_FORCE_RESET();
111+
__HAL_RCC_DAC1_RELEASE_RESET();
112+
__HAL_RCC_DAC1_CLK_DISABLE();
113+
}
86114

87115
// Configure GPIO back to reset value
88116
pin_function(obj->pin, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0));

targets/TARGET_STM/TARGET_STM32F1/analogout_device.c

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@
3535
#include "mbed_error.h"
3636
#include "PeripheralPins.h"
3737

38+
static int channel1_used = 0;
39+
#if defined(DAC_CHANNEL_2)
40+
static int channel2_used = 0;
41+
#endif
42+
3843
void analogout_init(dac_t *obj, PinName pin)
3944
{
4045
DAC_ChannelConfTypeDef sConfig = {0};
@@ -85,16 +90,38 @@ void analogout_init(dac_t *obj, PinName pin)
8590
error("HAL_DAC_ConfigChannel failed");
8691
}
8792

93+
if (obj->channel == DAC_CHANNEL_1) {
94+
channel1_used = 1;
95+
}
96+
#if defined(DAC_CHANNEL_2)
97+
if (obj->channel == DAC_CHANNEL_2) {
98+
channel2_used = 1;
99+
}
100+
#endif
88101
analogout_write_u16(obj, 0);
89102
HAL_DAC_Start(&obj->handle, obj->channel);
90103
}
91104

92105
void analogout_free(dac_t *obj)
93106
{
94-
// Reset DAC and disable clock
95-
__HAL_RCC_DAC_FORCE_RESET();
96-
__HAL_RCC_DAC_RELEASE_RESET();
97-
__HAL_RCC_DAC_CLK_DISABLE();
107+
if (obj->channel == DAC_CHANNEL_1) {
108+
channel1_used = 0;
109+
}
110+
#if defined(DAC_CHANNEL_2)
111+
if (obj->channel == DAC_CHANNEL_2) {
112+
channel2_used = 0;
113+
}
114+
#endif
115+
if ((channel1_used == 0)
116+
#if defined(DAC_CHANNEL_2)
117+
&& (channel2_used == 0)
118+
#endif
119+
) {
120+
// Reset DAC and disable clock
121+
__HAL_RCC_DAC_FORCE_RESET();
122+
__HAL_RCC_DAC_RELEASE_RESET();
123+
__HAL_RCC_DAC_CLK_DISABLE();
124+
}
98125

99126
// Configure GPIO back to reset value
100127
pin_function(obj->pin, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0));

targets/TARGET_STM/TARGET_STM32F2/analogout_device.c

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@
3535
#include "mbed_error.h"
3636
#include "PeripheralPins.h"
3737

38+
static int channel1_used = 0;
39+
#if defined(DAC_CHANNEL_2)
40+
static int channel2_used = 0;
41+
#endif
42+
3843
void analogout_init(dac_t *obj, PinName pin)
3944
{
4045
DAC_ChannelConfTypeDef sConfig = {0};
@@ -84,17 +89,40 @@ void analogout_init(dac_t *obj, PinName pin)
8489
if (HAL_DAC_ConfigChannel(&obj->handle, &sConfig, obj->channel) != HAL_OK) {
8590
error("HAL_DAC_ConfigChannel failed");
8691
}
92+
93+
if (obj->channel == DAC_CHANNEL_1) {
94+
channel1_used = 1;
95+
}
96+
#if defined(DAC_CHANNEL_2)
97+
if (obj->channel == DAC_CHANNEL_2) {
98+
channel2_used = 1;
99+
}
100+
#endif
87101

88102
analogout_write_u16(obj, 0);
89103
HAL_DAC_Start(&obj->handle, obj->channel);
90104
}
91105

92106
void analogout_free(dac_t *obj)
93107
{
94-
// Reset DAC and disable clock
95-
__HAL_RCC_DAC_FORCE_RESET();
96-
__HAL_RCC_DAC_RELEASE_RESET();
97-
__HAL_RCC_DAC_CLK_DISABLE();
108+
if (obj->channel == DAC_CHANNEL_1) {
109+
channel1_used = 0;
110+
}
111+
#if defined(DAC_CHANNEL_2)
112+
if (obj->channel == DAC_CHANNEL_2) {
113+
channel2_used = 0;
114+
}
115+
#endif
116+
if ((channel1_used == 0)
117+
#if defined(DAC_CHANNEL_2)
118+
&& (channel2_used == 0)
119+
#endif
120+
) {
121+
// Reset DAC and disable clock
122+
__HAL_RCC_DAC_FORCE_RESET();
123+
__HAL_RCC_DAC_RELEASE_RESET();
124+
__HAL_RCC_DAC_CLK_DISABLE();
125+
}
98126

99127
// Configure GPIO back to reset value
100128
pin_function(obj->pin, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0));

targets/TARGET_STM/TARGET_STM32F3/analogout_device.c

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@
3636
#include "PeripheralPins.h"
3737

3838
// These variables are used for the "free" function
39-
static int pa4_used = 0;
40-
static int pa5_used = 0;
39+
static int channel1_used = 0;
40+
#if defined(DAC_CHANNEL_2)
41+
static int channel2_used = 0;
42+
#endif
4143

4244
#if STATIC_PINMAP_READY
4345
#define ANALOGOUT_INIT_DIRECT analogout_init_direct
@@ -108,14 +110,14 @@ static void _analogout_init_direct(dac_t *obj, const PinMap *pinmap)
108110
sConfig.DAC_OutputSwitch = DAC_OUTPUTSWITCH_ENABLE;
109111
#endif
110112

111-
if (pinmap->pin == PA_4) {
112-
pa4_used = 1;
113+
if (obj->channel == DAC_CHANNEL_1) {
114+
channel1_used = 1;
113115
}
114-
115-
if (pinmap->pin == PA_5) {
116-
pa5_used = 1;
116+
#if defined(DAC_CHANNEL_2)
117+
if (obj->channel == DAC_CHANNEL_2) {
118+
channel2_used = 1;
117119
}
118-
120+
#endif
119121
if (HAL_DAC_ConfigChannel(&obj->handle, &sConfig, obj->channel) != HAL_OK) {
120122
error("HAL_DAC_ConfigChannel failed");
121123
}
@@ -137,21 +139,26 @@ void analogout_init(dac_t *obj, PinName pin)
137139
void analogout_free(dac_t *obj)
138140
{
139141
// Reset DAC and disable clock
140-
if (obj->pin == PA_4) {
141-
pa4_used = 0;
142+
if (obj->channel == DAC_CHANNEL_1) {
143+
channel1_used = 0;
142144
}
143-
if (obj->pin == PA_5) {
144-
pa5_used = 0;
145+
#if defined(DAC_CHANNEL_2)
146+
if (obj->channel == DAC_CHANNEL_2) {
147+
channel2_used = 0;
145148
}
146-
147-
if ((pa4_used == 0) && (pa5_used == 0)) {
149+
#endif
150+
if ((channel1_used == 0)
151+
#if defined(DAC_CHANNEL_2)
152+
&& (channel2_used == 0)
153+
#endif
154+
) {
148155
__HAL_RCC_DAC1_FORCE_RESET();
149156
__HAL_RCC_DAC1_RELEASE_RESET();
150157
__HAL_RCC_DAC1_CLK_DISABLE();
151158
}
152159

153160
#if defined(DAC2)
154-
if (obj->pin == PA_6) {
161+
if (obj->dac == DAC_2) {
155162
__HAL_RCC_DAC2_FORCE_RESET();
156163
__HAL_RCC_DAC2_RELEASE_RESET();
157164
__HAL_RCC_DAC2_CLK_DISABLE();

targets/TARGET_STM/TARGET_STM32G4/analogout_device.c

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@
2424
#include "PeripheralPins.h"
2525

2626
// These variables are used for the "free" function
27-
static int pa4_used = 0;
28-
static int pa5_used = 0;
27+
static int channel1_used = 0;
28+
#if defined(DAC_CHANNEL_2)
29+
static int channel2_used = 0;
30+
#endif
2931

3032
#if STATIC_PINMAP_READY
3133
#define ANALOGOUT_INIT_DIRECT analogout_init_direct
@@ -96,13 +98,14 @@ static void _analogout_init_direct(dac_t *obj, const PinMap *pinmap)
9698
sConfig.DAC_OutputSwitch = DAC_OUTPUTSWITCH_ENABLE;
9799
#endif
98100

99-
if (pinmap->pin == PA_4) {
100-
pa4_used = 1;
101+
if (obj->channel == DAC_CHANNEL_1) {
102+
channel1_used = 1;
101103
}
102-
103-
if (pinmap->pin == PA_5) {
104-
pa5_used = 1;
104+
#if defined(DAC_CHANNEL_2)
105+
if (obj->channel == DAC_CHANNEL_2) {
106+
channel2_used = 1;
105107
}
108+
#endif
106109

107110
if (HAL_DAC_ConfigChannel(&obj->handle, &sConfig, obj->channel) != HAL_OK) {
108111
error("HAL_DAC_ConfigChannel failed");
@@ -125,21 +128,27 @@ void analogout_init(dac_t *obj, PinName pin)
125128
void analogout_free(dac_t *obj)
126129
{
127130
// Reset DAC and disable clock
128-
if (obj->pin == PA_4) {
129-
pa4_used = 0;
131+
if (obj->channel == DAC_CHANNEL_1) {
132+
channel1_used = 0;
130133
}
131-
if (obj->pin == PA_5) {
132-
pa5_used = 0;
134+
#if defined(DAC_CHANNEL_2)
135+
if (obj->channel == DAC_CHANNEL_2) {
136+
channel2_used = 0;
133137
}
138+
#endif
134139

135-
if ((pa4_used == 0) && (pa5_used == 0)) {
140+
if ((channel1_used == 0)
141+
#if defined(DAC_CHANNEL_2)
142+
&& (channel2_used == 0)
143+
#endif
144+
) {
136145
__HAL_RCC_DAC1_FORCE_RESET();
137146
__HAL_RCC_DAC1_RELEASE_RESET();
138147
__HAL_RCC_DAC1_CLK_DISABLE();
139148
}
140149

141150
#if defined(DAC2)
142-
if (obj->pin == PA_6) {
151+
if (obj->dac == DAC_2) {
143152
__HAL_RCC_DAC2_FORCE_RESET();
144153
__HAL_RCC_DAC2_RELEASE_RESET();
145154
__HAL_RCC_DAC2_CLK_DISABLE();

targets/TARGET_STM/TARGET_STM32H7/analogout_device.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,14 @@ void analogout_init(dac_t *obj, PinName pin)
5757

5858
__GPIOA_CLK_ENABLE();
5959

60-
__HAL_RCC_DAC12_CLK_ENABLE();
60+
if (obj->dac == DAC_1) {
61+
__HAL_RCC_DAC12_CLK_ENABLE();
62+
}
63+
#if defined(DAC2)
64+
if (obj->dac == DAC_2) {
65+
__HAL_RCC_DAC2_CLK_ENABLE();
66+
}
67+
#endif
6168

6269
obj->handle.Instance = DAC1;
6370
obj->handle.State = HAL_DAC_STATE_RESET;

targets/TARGET_STM/TARGET_STM32L0/analogout_device.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525

2626
// These variables are used for the "free" function
2727
static int channel1_used = 0;
28+
#if defined(DAC_CHANNEL_2)
2829
static int channel2_used = 0;
30+
#endif
2931

3032
#if STATIC_PINMAP_READY
3133
#define ANALOGOUT_INIT_DIRECT analogout_init_direct
@@ -85,9 +87,12 @@ static void _analogout_init_direct(dac_t *obj, const PinMap *pinmap)
8587

8688
if (obj->channel == DAC_CHANNEL_1) {
8789
channel1_used = 1;
88-
} else {
90+
}
91+
#if defined(DAC_CHANNEL_2)
92+
if (obj->channel == DAC_CHANNEL_2) {
8993
channel2_used = 1;
9094
}
95+
#endif
9196

9297
analogout_write_u16(obj, 0);
9398
HAL_DAC_Start(&obj->handle, obj->channel);
@@ -114,7 +119,11 @@ void analogout_free(dac_t *obj)
114119
channel2_used = 0;
115120
}
116121
#endif
117-
if ((channel1_used == 0) && (channel2_used == 0)) {
122+
if ((channel1_used == 0)
123+
#if defined(DAC_CHANNEL_2)
124+
&& (channel2_used == 0)
125+
#endif
126+
) {
118127
__DAC_FORCE_RESET();
119128
__DAC_RELEASE_RESET();
120129
__DAC_CLK_DISABLE();

0 commit comments

Comments
 (0)