@@ -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