3232#include "py/mperrno.h"
3333#include "py/runtime.h"
3434#include "common-hal/microcontroller/Pin.h"
35- #include "fsl_gpio.h"
3635
3736uint64_t next_start_tick_ms = 0 ;
3837uint32_t next_start_tick_us = 1000 ;
@@ -45,7 +44,7 @@ uint32_t next_start_tick_us = 1000;
4544#pragma GCC push_options
4645#pragma GCC optimize ("Os")
4746
48- void common_hal_neopixel_write (const digitalio_digitalinout_obj_t * digitalinout , uint8_t * pixels ,
47+ void PLACE_IN_ITCM ( common_hal_neopixel_write ) (const digitalio_digitalinout_obj_t * digitalinout , uint8_t * pixels ,
4948 uint32_t numBytes ) {
5049 uint8_t * p = pixels , * end = p + numBytes , pix = * p ++ , mask = 0x80 ;
5150 uint32_t start = 0 ;
@@ -54,14 +53,10 @@ void common_hal_neopixel_write (const digitalio_digitalinout_obj_t* digitalinout
5453 //assumes 800_000Hz frequency
5554 //Theoretical values here are 800_000 -> 1.25us, 2500000->0.4us, 1250000->0.8us
5655 //TODO: try to get dynamic weighting working again
57- #ifdef MIMXRT1011_SERIES
58- uint32_t sys_freq = CLOCK_GetCoreFreq ();
59- #else
60- uint32_t sys_freq = CLOCK_GetAhbFreq ();
61- #endif
62- uint32_t interval = sys_freq /MAGIC_800_INT ;
63- uint32_t t0 = (sys_freq /MAGIC_800_T0H );
64- uint32_t t1 = (sys_freq /MAGIC_800_T1H );
56+ const uint32_t sys_freq = SystemCoreClock ;
57+ const uint32_t interval = (sys_freq / MAGIC_800_INT );
58+ const uint32_t t0 = (sys_freq / MAGIC_800_T0H );
59+ const uint32_t t1 = (sys_freq / MAGIC_800_T1H );
6560
6661 // This must be called while interrupts are on in case we're waiting for a
6762 // future ms tick.
@@ -79,9 +74,9 @@ void common_hal_neopixel_write (const digitalio_digitalinout_obj_t* digitalinout
7974 for (;;) {
8075 cyc = (pix & mask ) ? t1 : t0 ;
8176 start = DWT -> CYCCNT ;
82- GPIO_PinWrite ( gpio , pin , 1 );
77+ gpio -> DR |= ( 1U << pin );
8378 while ((DWT -> CYCCNT - start ) < cyc );
84- GPIO_PinWrite ( gpio , pin , 0 );
79+ gpio -> DR &= ~( 1U << pin );
8580 while ((DWT -> CYCCNT - start ) < interval );
8681 if (!(mask >>= 1 )) {
8782 if (p >= end ) break ;
0 commit comments