Skip to content

Commit 7c84589

Browse files
committed
Fixed analogWriteResolution behaviour
1 parent daf34ae commit 7c84589

File tree

1 file changed

+14
-18
lines changed

1 file changed

+14
-18
lines changed

cores/arduino/wiring_analog.c

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -194,11 +194,6 @@ uint32_t analogRead( uint32_t ulPin )
194194
void analogWrite( uint32_t ulPin, uint32_t ulValue )
195195
{
196196
uint32_t attr = g_APinDescription[ulPin].ulPinAttribute ;
197-
// uint32_t pwm_name = g_APinDescription[ulPin].ulTCChannel ;
198-
uint8_t isTC = 0 ;
199-
uint8_t Channelx ;
200-
Tc* TCx = 0 ;
201-
Tcc* TCCx = 0 ;
202197

203198
if ( (attr & PIN_ATTR_ANALOG) == PIN_ATTR_ANALOG )
204199
{
@@ -207,10 +202,12 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue )
207202
return;
208203
}
209204

205+
ulValue = mapResolution(ulValue, _writeResolution, 10);
206+
210207
syncDAC();
211208
DAC->DATA.reg = ulValue & 0x3FF; // DAC on 10 bits.
212209
syncDAC();
213-
DAC->CTRLA.bit.ENABLE = 0x01; //Enable ADC
210+
DAC->CTRLA.bit.ENABLE = 0x01; // Enable DAC
214211
syncDAC();
215212
return ;
216213
}
@@ -222,15 +219,15 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue )
222219
pinPeripheral( ulPin, g_APinDescription[ulPin].ulPinType ) ;
223220
}
224221

225-
Channelx = GetTCChannelNumber( g_APinDescription[ulPin].ulPWMChannel ) ;
222+
Tc* TCx = 0 ;
223+
Tcc* TCCx = 0 ;
224+
uint8_t Channelx = GetTCChannelNumber( g_APinDescription[ulPin].ulPWMChannel ) ;
226225
if ( GetTCNumber( g_APinDescription[ulPin].ulPWMChannel ) >= TCC_INST_NUM )
227226
{
228-
isTC = 1 ;
229227
TCx = (Tc*) GetTC( g_APinDescription[ulPin].ulPWMChannel ) ;
230228
}
231229
else
232230
{
233-
isTC = 0 ;
234231
TCCx = (Tcc*) GetTC( g_APinDescription[ulPin].ulPWMChannel ) ;
235232
}
236233

@@ -264,12 +261,14 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue )
264261
break ;
265262
}
266263

264+
ulValue = mapResolution(ulValue, _writeResolution, 8);
265+
267266
// Set PORT
268-
if ( isTC )
267+
if ( TCx )
269268
{
270269
// -- Configure TC
271-
// DISABLE TCx
272-
TCx->COUNT8.CTRLA.reg &=~(TC_CTRLA_ENABLE);
270+
// Disable TCx
271+
TCx->COUNT8.CTRLA.reg &= ~TC_CTRLA_ENABLE;
273272
// Set Timer counter Mode to 8 bits
274273
TCx->COUNT8.CTRLA.reg |= TC_CTRLA_MODE_COUNT8;
275274
// Set TCx as normal PWM
@@ -284,16 +283,15 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue )
284283
else
285284
{
286285
// -- Configure TCC
287-
288-
// DISABLE TCCx
289-
TCCx->CTRLA.reg &=~(TCC_CTRLA_ENABLE);
286+
// Disable TCCx
287+
TCCx->CTRLA.reg &= ~TCC_CTRLA_ENABLE;
290288
// Set TCx as normal PWM
291289
TCCx->WAVE.reg |= TCC_WAVE_WAVEGEN_NPWM;
292290
// Set TCx in waveform mode Normal PWM
293291
TCCx->CC[Channelx].reg = (uint32_t)ulValue;
294292
// Set PER to maximum counter value (resolution : 0xFF)
295293
TCCx->PER.reg = 0xFF;
296-
// ENABLE TCCx
294+
// Enable TCCx
297295
TCCx->CTRLA.reg |= TCC_CTRLA_ENABLE ;
298296
}
299297

@@ -302,9 +300,7 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue )
302300

303301
// -- Defaults to digital write
304302
pinMode( ulPin, OUTPUT ) ;
305-
306303
ulValue = mapResolution(ulValue, _writeResolution, 8);
307-
308304
if ( ulValue < 128 )
309305
{
310306
digitalWrite( ulPin, LOW ) ;

0 commit comments

Comments
 (0)