1#include "platforms/arm/teensy/is_teensy.h"
3#if defined(FL_IS_TEENSY_4X)
9#include "platforms/arm/teensy/teensy4_common/dmamem.h"
14FL_DMAMEM
uint32_t ObjectFLEDDmaManager::bitmask[4] __attribute__((aligned(32)));
20static inline uint32_t fl_save_primask_disable() {
22 __asm
volatile (
"mrs %0, primask\n\tcpsid i" :
"=r"(pm) ::
"memory");
25static inline void fl_restore_primask(
uint32_t pm) {
26 __asm
volatile (
"msr primask, %0" ::
"r"(pm) :
"memory");
29void ObjectFLEDDmaManager::acquire(
void* owner) {
33 const uint32_t pm = fl_save_primask_disable();
34 mCurrentOwner = owner;
35 fl_restore_primask(pm);
38void ObjectFLEDDmaManager::release(
void* owner) {
39 const uint32_t pm = fl_save_primask_disable();
40 if (mCurrentOwner != owner) {
41 fl_restore_primask(pm);
44 mCurrentOwner =
nullptr;
45 fl_restore_primask(pm);
48void ObjectFLEDDmaManager::waitForCompletion() {
50 while (!dma3.complete()) {
63bool ObjectFLEDDmaManager::ensureBitdata(
uint32_t numbytes) {
66 if (words == bitdataWords && bitdata !=
nullptr) {
75 mBitdataAlloc =
nullptr;
79 if (block ==
nullptr) {
82 mBitdataAlloc = block;
83 bitdata =
reinterpret_cast<uint32_t*
>(
89bool ObjectFLEDDmaManager::isBusy() {
90 return !dma3.complete();
Delay utilities for FastLED Includes nanosecond-precision delays, cycle counting, and microsecond del...
FASTLED_FORCE_INLINE void free(void *ptr) FL_NO_EXCEPT
FASTLED_FORCE_INLINE void * malloc(size_t size) FL_NO_EXCEPT
void delayMicroseconds(u32 us) FL_NO_EXCEPT
Delay for a given number of microseconds.
Base definition for an LED controller.
constexpr uint32_t grownBitdataWords(uint32_t currentWords, uint32_t numbytes, uint32_t bytesPerDma)
New capacity after seeing a frame of numbytes: grows, never shrinks.