@@ -171,7 +171,7 @@ EXTERN volatile irparams_t irparams;
171171 #define IR_USE_TIMER4_HS // tx = pin 10
172172
173173// Teensy 3.0 / Teensy 3.1
174- #elif defined(__MK20DX128__ ) || defined(__MK20DX256__ )
174+ #elif defined(__MK20DX128__ ) || defined(__MK20DX256__ ) || defined( __MK64FX512__ ) || defined( __MK66FX1M0__ )
175175 #define IR_USE_TIMER_CMT // tx = pin 5
176176
177177// Teensy-LC
@@ -503,7 +503,7 @@ EXTERN volatile irparams_t irparams;
503503#elif defined(IR_USE_TIMER_CMT )
504504
505505#define TIMER_RESET ({ \
506- uint8_t tmp = CMT_MSC; \
506+ uint8_t tmp __attribute__((unused)) = CMT_MSC; \
507507 CMT_CMD2 = 30; \
508508})
509509
@@ -526,19 +526,18 @@ EXTERN volatile irparams_t irparams;
526526#define ISR (f ) void f(void)
527527
528528//-----------------
529- #if (F_BUS == 48000000 )
530- # define CMT_PPS_VAL 5
531- #else
532- # define CMT_PPS_VAL 2
529+ #define CMT_PPS_DIV ((F_BUS + 7999999) / 8000000)
530+ #if F_BUS < 8000000
531+ #error IRremote requires at least 8 MHz on Teensy 3.x
533532#endif
534533
535534//-----------------
536535#define TIMER_CONFIG_KHZ (val ) ({ \
537536 SIM_SCGC4 |= SIM_SCGC4_CMT; \
538537 SIM_SOPT2 |= SIM_SOPT2_PTD7PAD; \
539- CMT_PPS = CMT_PPS_VAL; \
540- CMT_CGH1 = 2667 / val; \
541- CMT_CGL1 = 5333 / val; \
538+ CMT_PPS = CMT_PPS_DIV - 1; \
539+ CMT_CGH1 = ((F_BUS / CMT_PPS_DIV / 3000) + ((val)/2)) / (val); \
540+ CMT_CGL1 = ((F_BUS / CMT_PPS_DIV / 1500) + ((val)/2)) / (val); \
542541 CMT_CMD1 = 0; \
543542 CMT_CMD2 = 30; \
544543 CMT_CMD3 = 0; \
@@ -549,13 +548,13 @@ EXTERN volatile irparams_t irparams;
549548
550549#define TIMER_CONFIG_NORMAL () ({ \
551550 SIM_SCGC4 |= SIM_SCGC4_CMT; \
552- CMT_PPS = CMT_PPS_VAL; \
551+ CMT_PPS = CMT_PPS_DIV - 1; \
553552 CMT_CGH1 = 1; \
554553 CMT_CGL1 = 1; \
555554 CMT_CMD1 = 0; \
556- CMT_CMD2 = 30 \
555+ CMT_CMD2 = 30; \
557556 CMT_CMD3 = 0; \
558- CMT_CMD4 = 19; \
557+ CMT_CMD4 = (F_BUS / 160000 + CMT_PPS_DIV / 2) / CMT_PPS_DIV - 31; \
559558 CMT_OC = 0; \
560559 CMT_MSC = 0x03; \
561560})
0 commit comments