@@ -194,11 +194,6 @@ uint32_t analogRead( uint32_t ulPin )
194
194
void analogWrite ( uint32_t ulPin , uint32_t ulValue )
195
195
{
196
196
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 ;
202
197
203
198
if ( (attr & PIN_ATTR_ANALOG ) == PIN_ATTR_ANALOG )
204
199
{
@@ -207,10 +202,12 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue )
207
202
return ;
208
203
}
209
204
205
+ ulValue = mapResolution (ulValue , _writeResolution , 10 );
206
+
210
207
syncDAC ();
211
208
DAC -> DATA .reg = ulValue & 0x3FF ; // DAC on 10 bits.
212
209
syncDAC ();
213
- DAC -> CTRLA .bit .ENABLE = 0x01 ; //Enable ADC
210
+ DAC -> CTRLA .bit .ENABLE = 0x01 ; // Enable DAC
214
211
syncDAC ();
215
212
return ;
216
213
}
@@ -222,15 +219,15 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue )
222
219
pinPeripheral ( ulPin , g_APinDescription [ulPin ].ulPinType ) ;
223
220
}
224
221
225
- Channelx = GetTCChannelNumber ( g_APinDescription [ulPin ].ulPWMChannel ) ;
222
+ Tc * TCx = 0 ;
223
+ Tcc * TCCx = 0 ;
224
+ uint8_t Channelx = GetTCChannelNumber ( g_APinDescription [ulPin ].ulPWMChannel ) ;
226
225
if ( GetTCNumber ( g_APinDescription [ulPin ].ulPWMChannel ) >= TCC_INST_NUM )
227
226
{
228
- isTC = 1 ;
229
227
TCx = (Tc * ) GetTC ( g_APinDescription [ulPin ].ulPWMChannel ) ;
230
228
}
231
229
else
232
230
{
233
- isTC = 0 ;
234
231
TCCx = (Tcc * ) GetTC ( g_APinDescription [ulPin ].ulPWMChannel ) ;
235
232
}
236
233
@@ -264,12 +261,14 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue )
264
261
break ;
265
262
}
266
263
264
+ ulValue = mapResolution (ulValue , _writeResolution , 8 );
265
+
267
266
// Set PORT
268
- if ( isTC )
267
+ if ( TCx )
269
268
{
270
269
// -- Configure TC
271
- // DISABLE TCx
272
- TCx -> COUNT8 .CTRLA .reg &=~( TC_CTRLA_ENABLE ) ;
270
+ // Disable TCx
271
+ TCx -> COUNT8 .CTRLA .reg &= ~ TC_CTRLA_ENABLE ;
273
272
// Set Timer counter Mode to 8 bits
274
273
TCx -> COUNT8 .CTRLA .reg |= TC_CTRLA_MODE_COUNT8 ;
275
274
// Set TCx as normal PWM
@@ -284,16 +283,15 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue )
284
283
else
285
284
{
286
285
// -- Configure TCC
287
-
288
- // DISABLE TCCx
289
- TCCx -> CTRLA .reg &=~(TCC_CTRLA_ENABLE );
286
+ // Disable TCCx
287
+ TCCx -> CTRLA .reg &= ~TCC_CTRLA_ENABLE ;
290
288
// Set TCx as normal PWM
291
289
TCCx -> WAVE .reg |= TCC_WAVE_WAVEGEN_NPWM ;
292
290
// Set TCx in waveform mode Normal PWM
293
291
TCCx -> CC [Channelx ].reg = (uint32_t )ulValue ;
294
292
// Set PER to maximum counter value (resolution : 0xFF)
295
293
TCCx -> PER .reg = 0xFF ;
296
- // ENABLE TCCx
294
+ // Enable TCCx
297
295
TCCx -> CTRLA .reg |= TCC_CTRLA_ENABLE ;
298
296
}
299
297
@@ -302,9 +300,7 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue )
302
300
303
301
// -- Defaults to digital write
304
302
pinMode ( ulPin , OUTPUT ) ;
305
-
306
303
ulValue = mapResolution (ulValue , _writeResolution , 8 );
307
-
308
304
if ( ulValue < 128 )
309
305
{
310
306
digitalWrite ( ulPin , LOW ) ;
0 commit comments