38
38
#define DAC_RANGE (0xFFF) // 12 bits
39
39
#define DAC_NB_BITS (12)
40
40
41
- static DAC_HandleTypeDef DacHandle ;
42
-
43
41
// These variables are used for the "free" function
44
42
static int pa4_used = 0 ;
45
43
static int pa5_used = 0 ;
@@ -54,7 +52,20 @@ void analogout_init(dac_t *obj, PinName pin) {
54
52
// Get the pin function and assign the used channel to the object
55
53
uint32_t function = pinmap_function (pin , PinMap_DAC );
56
54
MBED_ASSERT (function != (uint32_t )NC );
57
- obj -> channel = STM_PIN_CHANNEL (function );
55
+
56
+ switch (STM_PIN_CHANNEL (function )) {
57
+ case 1 :
58
+ obj -> channel = DAC_CHANNEL_1 ;
59
+ break ;
60
+ #if defined(DAC_CHANNEL_2 )
61
+ case 2 :
62
+ obj -> channel = DAC_CHANNEL_2 ;
63
+ break ;
64
+ #endif
65
+ default :
66
+ error ("Unknown DAC channel" );
67
+ break ;
68
+ }
58
69
59
70
// Configure GPIO
60
71
pinmap_pinout (pin , PinMap_DAC );
@@ -73,26 +84,23 @@ void analogout_init(dac_t *obj, PinName pin) {
73
84
#endif
74
85
75
86
// Configure DAC
76
- DacHandle .Instance = (DAC_TypeDef * )(obj -> dac );
87
+ obj -> handle .Instance = (DAC_TypeDef * )(obj -> dac );
77
88
78
89
sConfig .DAC_Trigger = DAC_TRIGGER_NONE ;
79
90
sConfig .DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE ;
80
91
92
+
81
93
if (pin == PA_4 ) {
82
- HAL_DAC_ConfigChannel (& DacHandle , & sConfig , DAC_CHANNEL_1 );
83
94
pa4_used = 1 ;
84
95
}
85
96
86
97
#if defined(DAC_CHANNEL_2 )
87
98
if (pin == PA_5 ) {
88
- HAL_DAC_ConfigChannel (& DacHandle , & sConfig , DAC_CHANNEL_2 );
89
99
pa5_used = 1 ;
90
100
}
91
101
#endif
92
102
93
- if (pin == PA_6 ) {
94
- HAL_DAC_ConfigChannel (& DacHandle , & sConfig , DAC_CHANNEL_1 );
95
- }
103
+ HAL_DAC_ConfigChannel (& obj -> handle , & sConfig , obj -> channel );
96
104
97
105
analogout_write_u16 (obj , 0 );
98
106
}
@@ -121,28 +129,12 @@ void analogout_free(dac_t *obj) {
121
129
}
122
130
123
131
static inline void dac_write (dac_t * obj , int value ) {
124
- if (obj -> channel == 1 ) {
125
- HAL_DAC_SetValue (& DacHandle , DAC_CHANNEL_1 , DAC_ALIGN_12B_R , (value & DAC_RANGE ));
126
- HAL_DAC_Start (& DacHandle , DAC_CHANNEL_1 );
127
- }
128
- #if defined(DAC_CHANNEL_2 )
129
- if (obj -> channel == 2 ) {
130
- HAL_DAC_SetValue (& DacHandle , DAC_CHANNEL_2 , DAC_ALIGN_12B_R , (value & DAC_RANGE ));
131
- HAL_DAC_Start (& DacHandle , DAC_CHANNEL_2 );
132
- }
133
- #endif
132
+ HAL_DAC_SetValue (& obj -> handle , obj -> channel , DAC_ALIGN_12B_R , (value & DAC_RANGE ));
133
+ HAL_DAC_Start (& obj -> handle , obj -> channel );
134
134
}
135
135
136
136
static inline int dac_read (dac_t * obj ) {
137
- if (obj -> channel == 1 ) {
138
- return (int )HAL_DAC_GetValue (& DacHandle , DAC_CHANNEL_1 );
139
- }
140
- #if defined(DAC_CHANNEL_2 )
141
- if (obj -> channel == 2 ) {
142
- return (int )HAL_DAC_GetValue (& DacHandle , DAC_CHANNEL_2 );
143
- }
144
- #endif
145
- return 0 ;
137
+ return (int )HAL_DAC_GetValue (& obj -> handle , obj -> channel );
146
138
}
147
139
148
140
void analogout_write (dac_t * obj , float value ) {
0 commit comments