Skip to content

Commit 0d39873

Browse files
authored
Merge pull request Arduino-IRremote#343 from PaulStoffregen/master
Minor fixes for Teensy 3.x
2 parents bb0323b + e72008a commit 0d39873

File tree

1 file changed

+11
-12
lines changed

1 file changed

+11
-12
lines changed

IRremoteInt.h

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)