Support for Teensy 4.0 / 4.1 (#849)

This commit is contained in:
Dimitre
2024-09-24 02:14:45 -03:00
committed by GitHub
parent b99c595084
commit 54b49bc3c4

View File

@@ -1,6 +1,6 @@
/*------------------------------------------------------------------------- /*-------------------------------------------------------------------------
NeoPixel library helper functions for ARM MCUs. NeoPixel library helper functions for ARM MCUs.
Teensy 3.0, 3.1, LC, Arduino Due Teensy 3.0, 3.1, 3.5, 3.6, 4.0, 4.1, LC, Arduino Due
Written by Michael C. Miller. Written by Michael C. Miller.
Some work taken from the Adafruit NeoPixel library. Some work taken from the Adafruit NeoPixel library.
@@ -124,8 +124,8 @@ private:
uint8_t _pin; // output pin number uint8_t _pin; // output pin number
}; };
// Teensy 3.0 or 3.1 (3.2) or 3.5 or 3.6 // Teensy
#if defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__) #if defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__) || defined (__IMXRT1062__) || defined (__IMXRT1052__)
class NeoArmMk20dxSpeedProps800KbpsBase class NeoArmMk20dxSpeedProps800KbpsBase
{ {
@@ -204,10 +204,15 @@ public:
uint8_t pix; uint8_t pix;
uint8_t mask; uint8_t mask;
volatile uint8_t* set = portSetRegister(pin); volatile auto set = portSetRegister(pin);
volatile uint8_t* clr = portClearRegister(pin); volatile auto clr = portClearRegister(pin);
uint32_t cyc; uint32_t cyc;
#if defined(KINETIS) || defined(KINETISL)
uint8_t msk = 1;
#else
uint32_t msk = digitalPinToBitMask(pin);
#endif
ARM_DEMCR |= ARM_DEMCR_TRCENA; ARM_DEMCR |= ARM_DEMCR_TRCENA;
ARM_DWT_CTRL |= ARM_DWT_CTRL_CYCCNTENA; ARM_DWT_CTRL |= ARM_DWT_CTRL_CYCCNTENA;
@@ -221,7 +226,7 @@ public:
while (ARM_DWT_CYCCNT - cyc < T_SPEEDPROPS::Cycles); while (ARM_DWT_CYCCNT - cyc < T_SPEEDPROPS::Cycles);
cyc = ARM_DWT_CYCCNT; cyc = ARM_DWT_CYCCNT;
*set = 1; *set = msk;
if (pix & mask) if (pix & mask)
{ {
while (ARM_DWT_CYCCNT - cyc < T_SPEEDPROPS::CyclesT1h); while (ARM_DWT_CYCCNT - cyc < T_SPEEDPROPS::CyclesT1h);
@@ -230,7 +235,7 @@ public:
{ {
while (ARM_DWT_CYCCNT - cyc < T_SPEEDPROPS::CyclesT0h); while (ARM_DWT_CYCCNT - cyc < T_SPEEDPROPS::CyclesT0h);
} }
*clr = 1; *clr = msk;
} }
} }
} }