@@ -42,9 +42,9 @@ static void syncDAC() {
42
42
}
43
43
44
44
// Wait for synchronization of registers between the clock domains
45
- static __inline__ void syncTC_8 (Tc * TCx ) __attribute__((always_inline , unused ));
46
- static void syncTC_8 (Tc * TCx ) {
47
- while (TCx -> COUNT8 .STATUS .bit .SYNCBUSY );
45
+ static __inline__ void syncTC_16 (Tc * TCx ) __attribute__((always_inline , unused ));
46
+ static void syncTC_16 (Tc * TCx ) {
47
+ while (TCx -> COUNT16 .STATUS .bit .SYNCBUSY );
48
48
}
49
49
50
50
// Wait for synchronization of registers between the clock domains
@@ -212,7 +212,7 @@ void analogWrite(uint32_t pin, uint32_t value)
212
212
213
213
if ((attr & PIN_ATTR_PWM ) == PIN_ATTR_PWM )
214
214
{
215
- value = mapResolution (value , _writeResolution , 8 );
215
+ value = mapResolution (value , _writeResolution , 16 );
216
216
217
217
uint32_t tcNum = GetTCNumber (pinDesc .ulPWMChannel );
218
218
uint8_t tcChannel = GetTCChannelNumber (pinDesc .ulPWMChannel );
@@ -254,37 +254,31 @@ void analogWrite(uint32_t pin, uint32_t value)
254
254
// -- Configure TC
255
255
Tc * TCx = (Tc * ) GetTC (pinDesc .ulPWMChannel );
256
256
// Disable TCx
257
- TCx -> COUNT8 .CTRLA .bit .ENABLE = 0 ;
258
- syncTC_8 (TCx );
259
- // Set Timer counter Mode to 8 bits, normal PWM, prescaler 1/256
260
- TCx -> COUNT8 .CTRLA .reg |= TC_CTRLA_MODE_COUNT8 | TC_CTRLA_WAVEGEN_NPWM | TC_CTRLA_PRESCALER_DIV256 ;
261
- syncTC_8 (TCx );
257
+ TCx -> COUNT16 .CTRLA .bit .ENABLE = 0 ;
258
+ syncTC_16 (TCx );
259
+ // Set Timer counter Mode to 16 bits, normal PWM
260
+ TCx -> COUNT16 .CTRLA .reg |= TC_CTRLA_MODE_COUNT16 | TC_CTRLA_WAVEGEN_NPWM ;
261
+ syncTC_16 (TCx );
262
262
// Set the initial value
263
- TCx -> COUNT8 .CC [tcChannel ].reg = (uint8_t ) value ;
264
- syncTC_8 (TCx );
265
- // Set PER to maximum counter value (resolution : 0xFF)
266
- TCx -> COUNT8 .PER .reg = 0xFF ;
267
- syncTC_8 (TCx );
263
+ TCx -> COUNT16 .CC [tcChannel ].reg = (uint32_t ) value ;
264
+ syncTC_16 (TCx );
268
265
// Enable TCx
269
- TCx -> COUNT8 .CTRLA .bit .ENABLE = 1 ;
270
- syncTC_8 (TCx );
266
+ TCx -> COUNT16 .CTRLA .bit .ENABLE = 1 ;
267
+ syncTC_16 (TCx );
271
268
} else {
272
269
// -- Configure TCC
273
270
Tcc * TCCx = (Tcc * ) GetTC (pinDesc .ulPWMChannel );
274
271
// Disable TCCx
275
272
TCCx -> CTRLA .bit .ENABLE = 0 ;
276
273
syncTCC (TCCx );
277
- // Set prescaler to 1/256
278
- TCCx -> CTRLA .reg |= TCC_CTRLA_PRESCALER_DIV256 ;
279
- syncTCC (TCCx );
280
- // Set TCx as normal PWM
274
+ // Set TCCx as normal PWM
281
275
TCCx -> WAVE .reg |= TCC_WAVE_WAVEGEN_NPWM ;
282
276
syncTCC (TCCx );
283
277
// Set the initial value
284
278
TCCx -> CC [tcChannel ].reg = (uint32_t ) value ;
285
279
syncTCC (TCCx );
286
- // Set PER to maximum counter value (resolution : 0xFF )
287
- TCCx -> PER .reg = 0xFF ;
280
+ // Set PER to maximum counter value (resolution : 0xFFFF )
281
+ TCCx -> PER .reg = 0xFFFF ;
288
282
syncTCC (TCCx );
289
283
// Enable TCCx
290
284
TCCx -> CTRLA .bit .ENABLE = 1 ;
@@ -293,8 +287,8 @@ void analogWrite(uint32_t pin, uint32_t value)
293
287
} else {
294
288
if (tcNum >= TCC_INST_NUM ) {
295
289
Tc * TCx = (Tc * ) GetTC (pinDesc .ulPWMChannel );
296
- TCx -> COUNT8 .CC [tcChannel ].reg = (uint8_t ) value ;
297
- syncTC_8 (TCx );
290
+ TCx -> COUNT16 .CC [tcChannel ].reg = (uint32_t ) value ;
291
+ syncTC_16 (TCx );
298
292
} else {
299
293
Tcc * TCCx = (Tcc * ) GetTC (pinDesc .ulPWMChannel );
300
294
TCCx -> CTRLBSET .bit .LUPD = 1 ;
0 commit comments