Skip to content

Commit 33f6b13

Browse files
committed
force TCC WEXCTRL to 0
1 parent 5c822b1 commit 33f6b13

1 file changed

Lines changed: 28 additions & 19 deletions

File tree

uCNC/src/hal/mcus/samd21/mcumap_samd21.h

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2369,7 +2369,12 @@ extern "C"
23692369
while (timer->SYNCBUSY.reg & TCC_SYNCBUSY_MASK) \
23702370
; \
23712371
timer->CTRLA.bit.PRESCALER = presc; \
2372+
while (timer->SYNCBUSY.reg & TCC_SYNCBUSY_MASK) \
2373+
; \
23722374
timer->WAVE.bit.WAVEGEN = 2; \
2375+
while (timer->SYNCBUSY.reg & TCC_SYNCBUSY_MASK) \
2376+
; \
2377+
timer->WEXCTRL.reg = 0; \
23732378
while (timer->SYNCBUSY.reg & TCC_SYNCBUSY_MASK) \
23742379
; \
23752380
timer->CC[(channel & 0x3)].reg = 0; \
@@ -2396,14 +2401,18 @@ extern "C"
23962401
timer->CTRLBCLR.bit.LUPD = 1; \
23972402
} while (0)
23982403

2399-
#define pwm_tc_config(timer, channel, presc) \
2404+
#define pwm_tc_config(timer, channel, presc) \
24002405
do \
24012406
{ \
24022407
timer->COUNT8.CTRLA.bit.ENABLE = 0; \
24032408
while (timer->COUNT8.STATUS.bit.SYNCBUSY) \
24042409
; \
24052410
timer->COUNT8.CTRLA.bit.MODE = 1; \
2411+
while (timer->COUNT8.STATUS.bit.SYNCBUSY) \
2412+
; \
24062413
timer->COUNT8.CTRLA.bit.PRESCALER = presc; \
2414+
while (timer->COUNT8.STATUS.bit.SYNCBUSY) \
2415+
; \
24072416
timer->COUNT8.CTRLA.bit.WAVEGEN = 2; \
24082417
while (timer->COUNT8.STATUS.bit.SYNCBUSY) \
24092418
; \
@@ -2908,24 +2917,24 @@ extern "C"
29082917

29092918
#define mcu_config_input_isr(diopin) (mcu_config_altfunc(diopin))
29102919

2911-
#define mcu_config_pwm(diopin, freq) \
2912-
{ \
2913-
SETBIT(__indirect__(diopin, GPIO).DIR.reg, __indirect__(diopin, BIT)); \
2914-
(__indirect__(diopin, PMUX)) = __indirect__(diopin, PMUXVAL); \
2915-
__indirect__(diopin, GPIO).PINCFG[__indirect__(diopin, BIT)].reg = 1; \
2916-
uint16_t div = ((F_TIMERS >> 8) / freq); \
2917-
uint8_t presc = 0; \
2918-
while (div > 1) \
2919-
{ \
2920-
uint8_t shift = (presc >= 4) ? 2 : 1; \
2921-
div = ((div + 1) >> shift); \
2922-
presc++; \
2923-
if (presc == 7) \
2924-
{ \
2925-
break; \
2926-
} \
2927-
} \
2928-
pwm_t_config(__indirect__(diopin, TIMER), __indirect__(diopin, CHANNEL), presc); \
2920+
#define mcu_config_pwm(diopin, freq) \
2921+
{ \
2922+
SETBIT(__indirect__(diopin, GPIO).DIR.reg, __indirect__(diopin, BIT)); \
2923+
(__indirect__(diopin, PMUX)) = __indirect__(diopin, PMUXVAL); \
2924+
__indirect__(diopin, GPIO).PINCFG[__indirect__(diopin, BIT)].reg = 1; \
2925+
uint16_t div = ((F_TIMERS >> 8) / freq); \
2926+
uint8_t presc = 0; \
2927+
while (div > 1) \
2928+
{ \
2929+
uint8_t shift = (presc >= 4) ? 2 : 1; \
2930+
div = ((div + 1) >> shift); \
2931+
presc++; \
2932+
if (presc == 7) \
2933+
{ \
2934+
break; \
2935+
} \
2936+
} \
2937+
pwm_t_config(__indirect__(diopin, TIMER), __indirect__(diopin, CHANNEL), presc); \
29292938
}
29302939

29312940
#define mcu_get_input(diopin) (CHECKBIT(__indirect__(diopin, GPIO).IN.reg, __indirect__(diopin, BIT)))

0 commit comments

Comments
 (0)