mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-03 17:59:27 +02:00
Revert "Update Adafruit_NeoPixel library to commit fd74287"
This commit is contained in:
parent
6824f0633a
commit
6f59924b4e
3 changed files with 3945 additions and 4326 deletions
|
@ -92,11 +92,6 @@
|
|||
}
|
||||
init = true;
|
||||
#endif
|
||||
#if defined(ESP32)
|
||||
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0)
|
||||
espInit();
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -122,13 +117,6 @@
|
|||
@brief Deallocate Adafruit_NeoPixel object, set data pin back to INPUT.
|
||||
*/
|
||||
Adafruit_NeoPixel::~Adafruit_NeoPixel() {
|
||||
#ifdef ARDUINO_ARCH_ESP32
|
||||
// Release RMT resources (RMT channels and led_data)
|
||||
// by indirectly calling into espShow()
|
||||
memset(pixels, 0, numBytes);
|
||||
numLEDs = numBytes = 0;
|
||||
show();
|
||||
#endif
|
||||
free(pixels);
|
||||
if (pin >= 0)
|
||||
pinMode(pin, INPUT);
|
||||
|
@ -236,162 +224,7 @@
|
|||
// Bits for transmission must be shifted to top 8 bits
|
||||
pio_sm_put_blocking(pio, sm, ((uint32_t)*pixels++)<< 24);
|
||||
}
|
||||
#elif defined(ARDUINO_ARCH_CH32)
|
||||
|
||||
// F_CPU is defined to SystemCoreClock (not constant number)
|
||||
#if SYSCLK_FREQ_144MHz_HSE == 144000000 || SYSCLK_FREQ_HSE == 144000000 || \
|
||||
SYSCLK_FREQ_144MHz_HSI == 144000000 || SYSCLK_FREQ_HSI == 144000000
|
||||
#define CH32_F_CPU 144000000
|
||||
|
||||
#elif SYSCLK_FREQ_120MHz_HSE == 120000000 || SYSCLK_FREQ_HSE == 120000000 || \
|
||||
SYSCLK_FREQ_120MHz_HSI == 120000000 || SYSCLK_FREQ_HSI == 120000000
|
||||
#define CH32_F_CPU 120000000
|
||||
|
||||
#elif SYSCLK_FREQ_96MHz_HSE == 96000000 || SYSCLK_FREQ_HSE == 96000000 || \
|
||||
SYSCLK_FREQ_96MHz_HSI == 96000000 || SYSCLK_FREQ_HSI == 96000000
|
||||
#define CH32_F_CPU 96000000
|
||||
|
||||
#elif SYSCLK_FREQ_72MHz_HSE == 72000000 || SYSCLK_FREQ_HSE == 72000000 || \
|
||||
SYSCLK_FREQ_72MHz_HSI == 72000000 || SYSCLK_FREQ_HSI == 72000000
|
||||
#define CH32_F_CPU 72000000
|
||||
|
||||
#elif SYSCLK_FREQ_56MHz_HSE == 56000000 || SYSCLK_FREQ_HSE == 56000000 || \
|
||||
SYSCLK_FREQ_56MHz_HSI == 56000000 || SYSCLK_FREQ_HSI == 56000000
|
||||
#define CH32_F_CPU 56000000
|
||||
|
||||
#elif SYSCLK_FREQ_48MHz_HSE == 48000000 || SYSCLK_FREQ_HSE == 48000000 || \
|
||||
SYSCLK_FREQ_48MHz_HSI == 48000000 || SYSCLK_FREQ_HSI == 48000000
|
||||
#define CH32_F_CPU 48000000
|
||||
|
||||
#endif
|
||||
|
||||
static void ch32Show(GPIO_TypeDef* ch_port, uint32_t ch_pin, uint8_t* pixels, uint32_t numBytes, bool is800KHz) {
|
||||
// not support 400khz
|
||||
if (!is800KHz) return;
|
||||
|
||||
volatile uint32_t* set = &ch_port->BSHR;
|
||||
volatile uint32_t* clr = &ch_port->BCR;
|
||||
|
||||
uint8_t* ptr = pixels;
|
||||
uint8_t* end = ptr + numBytes;
|
||||
uint8_t p = *ptr++;
|
||||
uint8_t bitMask = 0x80;
|
||||
|
||||
// NVIC_DisableIRQ(SysTicK_IRQn);
|
||||
|
||||
while (1) {
|
||||
if (p & bitMask) { // ONE
|
||||
// High 800ns
|
||||
*set = ch_pin;
|
||||
__asm volatile ("nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop;"
|
||||
#if CH32_F_CPU >= 72000000
|
||||
"nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop;"
|
||||
#endif
|
||||
#if CH32_F_CPU >= 96000000
|
||||
"nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
#endif
|
||||
#if CH32_F_CPU >= 120000000
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
#endif
|
||||
#if CH32_F_CPU >= 144000000
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
#endif
|
||||
);
|
||||
|
||||
// Low 450ns
|
||||
*clr = ch_pin;
|
||||
__asm volatile ("nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop;"
|
||||
#if CH32_F_CPU >= 72000000
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
#endif
|
||||
#if CH32_F_CPU >= 96000000
|
||||
"nop; nop; nop; nop; nop; nop;"
|
||||
#endif
|
||||
#if CH32_F_CPU >= 120000000
|
||||
"nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
#endif
|
||||
#if CH32_F_CPU >= 144000000
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
#endif
|
||||
);
|
||||
} else { // ZERO
|
||||
// High 400ns
|
||||
*set = ch_pin;
|
||||
__asm volatile ("nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop;"
|
||||
#if CH32_F_CPU >= 72000000
|
||||
"nop; nop; nop; nop; nop; nop; nop;"
|
||||
#endif
|
||||
#if CH32_F_CPU >= 96000000
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
#endif
|
||||
#if CH32_F_CPU >= 120000000
|
||||
"nop; nop; nop; "
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
#endif
|
||||
#if CH32_F_CPU >= 144000000
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
#endif
|
||||
);
|
||||
|
||||
// Low 850ns
|
||||
*clr = ch_pin;
|
||||
__asm volatile ("nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop;"
|
||||
#if CH32_F_CPU >= 72000000
|
||||
"nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
#endif
|
||||
#if CH32_F_CPU >= 96000000
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop;"
|
||||
#endif
|
||||
#if CH32_F_CPU >= 120000000
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop;"
|
||||
#endif
|
||||
#if CH32_F_CPU >= 144000000
|
||||
"nop; nop; nop; nop;"
|
||||
"nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;"
|
||||
#endif
|
||||
);
|
||||
}
|
||||
|
||||
if (bitMask >>= 1) {
|
||||
// Move on to the next pixel
|
||||
asm("nop;");
|
||||
}
|
||||
else {
|
||||
if (ptr >= end) {
|
||||
break;
|
||||
}
|
||||
p = *ptr++;
|
||||
bitMask = 0x80;
|
||||
}
|
||||
}
|
||||
|
||||
// NVIC_EnableIRQ(SysTicK_IRQn);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(ESP8266)
|
||||
|
@ -401,7 +234,6 @@
|
|||
#elif defined(ESP32)
|
||||
extern "C" void espShow(uint16_t pin, uint8_t *pixels, uint32_t numBytes,
|
||||
uint8_t type);
|
||||
|
||||
#endif // ESP8266
|
||||
|
||||
#if defined(K210)
|
||||
|
@ -2424,7 +2256,7 @@
|
|||
|
||||
#elif defined(__SAMD21E17A__) || defined(__SAMD21G18A__) || \
|
||||
defined(__SAMD21E18A__) || defined(__SAMD21J18A__) || \
|
||||
defined(__SAMD11C14A__) || defined(__SAMD21G17A__)
|
||||
defined (__SAMD11C14A__)
|
||||
// Arduino Zero, Gemma/Trinket M0, SODAQ Autonomo
|
||||
// and others
|
||||
// Tried this with a timer/counter, couldn't quite get adequate
|
||||
|
@ -3082,89 +2914,7 @@
|
|||
; // Wait for last bit
|
||||
TC_Stop(TC1, 0);
|
||||
|
||||
|
||||
// RENESAS including UNO R4
|
||||
#elif defined(ARDUINO_ARCH_RENESAS) || defined(ARDUINO_ARCH_RENESAS_UNO) || defined(ARDUINO_ARCH_RENESAS_PORTENTA)
|
||||
|
||||
// Definition for a single channel clockless controller for RA4M1 (Cortex M4)
|
||||
// See clockless.h for detailed info on how the template parameters are used.
|
||||
#define ARM_DEMCR (*(volatile uint32_t *)0xE000EDFC) // Debug Exception and Monitor Control
|
||||
#define ARM_DEMCR_TRCENA (1 << 24) // Enable debugging & monitoring blocks
|
||||
#define ARM_DWT_CTRL (*(volatile uint32_t *)0xE0001000) // DWT control register
|
||||
#define ARM_DWT_CTRL_CYCCNTENA (1 << 0) // Enable cycle count
|
||||
#define ARM_DWT_CYCCNT (*(volatile uint32_t *)0xE0001004) // Cycle count register
|
||||
|
||||
#define F_CPU 48000000
|
||||
#define CYCLES_800_T0H (F_CPU / 4000000)
|
||||
#define CYCLES_800_T1H (F_CPU / 1250000)
|
||||
#define CYCLES_800 (F_CPU / 800000)
|
||||
#define CYCLES_400_T0H (F_CPU / 2000000)
|
||||
#define CYCLES_400_T1H (F_CPU / 833333)
|
||||
#define CYCLES_400 (F_CPU / 400000)
|
||||
|
||||
uint8_t *p = pixels, *end = p + numBytes, pix, mask;
|
||||
|
||||
bsp_io_port_pin_t io_pin = g_pin_cfg[pin].pin;
|
||||
#define PIN_IO_PORT_ADDR(pn) (R_PORT0 + ((uint32_t) (R_PORT1 - R_PORT0) * ((pn) >> 8u)))
|
||||
|
||||
volatile uint16_t *set = &(PIN_IO_PORT_ADDR(io_pin)->POSR);
|
||||
volatile uint16_t *clr = &(PIN_IO_PORT_ADDR(io_pin)->PORR);
|
||||
uint16_t msk = (1U << (io_pin & 0xFF));
|
||||
|
||||
uint32_t cyc;
|
||||
|
||||
ARM_DEMCR |= ARM_DEMCR_TRCENA;
|
||||
ARM_DWT_CTRL |= ARM_DWT_CTRL_CYCCNTENA;
|
||||
|
||||
#if defined(NEO_KHZ400) // 800 KHz check needed only if 400 KHz support enabled
|
||||
if (is800KHz) {
|
||||
#endif
|
||||
cyc = ARM_DWT_CYCCNT + CYCLES_800;
|
||||
while (p < end) {
|
||||
pix = *p++;
|
||||
for (mask = 0x80; mask; mask >>= 1) {
|
||||
while (ARM_DWT_CYCCNT - cyc < CYCLES_800)
|
||||
;
|
||||
cyc = ARM_DWT_CYCCNT;
|
||||
*set = msk;
|
||||
if (pix & mask) {
|
||||
while (ARM_DWT_CYCCNT - cyc < CYCLES_800_T1H)
|
||||
;
|
||||
} else {
|
||||
while (ARM_DWT_CYCCNT - cyc < CYCLES_800_T0H)
|
||||
;
|
||||
}
|
||||
*clr = msk;
|
||||
}
|
||||
}
|
||||
while (ARM_DWT_CYCCNT - cyc < CYCLES_800)
|
||||
;
|
||||
#if defined(NEO_KHZ400)
|
||||
} else { // 400 kHz bitstream
|
||||
cyc = ARM_DWT_CYCCNT + CYCLES_400;
|
||||
while (p < end) {
|
||||
pix = *p++;
|
||||
for (mask = 0x80; mask; mask >>= 1) {
|
||||
while (ARM_DWT_CYCCNT - cyc < CYCLES_400)
|
||||
;
|
||||
cyc = ARM_DWT_CYCCNT;
|
||||
*set = msk;
|
||||
if (pix & mask) {
|
||||
while (ARM_DWT_CYCCNT - cyc < CYCLES_400_T1H)
|
||||
;
|
||||
} else {
|
||||
while (ARM_DWT_CYCCNT - cyc < CYCLES_400_T0H)
|
||||
;
|
||||
}
|
||||
*clr = msk;
|
||||
}
|
||||
}
|
||||
while (ARM_DWT_CYCCNT - cyc < CYCLES_400)
|
||||
;
|
||||
}
|
||||
#endif // NEO_KHZ400
|
||||
|
||||
#endif // ARM
|
||||
#endif // end Due
|
||||
|
||||
// END ARM ----------------------------------------------------------------
|
||||
|
||||
|
@ -3276,8 +3026,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
#elif defined(ARDUINO_ARCH_CH32)
|
||||
ch32Show(gpioPort, gpioPin, pixels, numBytes, is800KHz);
|
||||
#else
|
||||
#error Architecture not supported
|
||||
#endif
|
||||
|
@ -3311,15 +3059,6 @@
|
|||
#if defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_ARDUINO_CORE_STM32)
|
||||
gpioPort = digitalPinToPort(p);
|
||||
gpioPin = STM_LL_GPIO_PIN(digitalPinToPinName(p));
|
||||
#elif defined(ARDUINO_ARCH_CH32)
|
||||
PinName const pin_name = digitalPinToPinName(pin);
|
||||
gpioPort = get_GPIO_Port(CH_PORT(pin_name));
|
||||
gpioPin = CH_GPIO_PIN(pin_name);
|
||||
#if defined (CH32V20x_D6)
|
||||
if (gpioPort == GPIOC && ((*(volatile uint32_t*)0x40022030) & 0x0F000000) == 0) {
|
||||
gpioPin = gpioPin >> 13;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -3733,4 +3472,3 @@
|
|||
if (w < 0) w = r; // If 'w' not specified, duplicate r bits
|
||||
return (w << 6) | (r << 4) | ((g & 3) << 2) | (b & 3);
|
||||
}
|
||||
|
|
@ -208,15 +208,6 @@
|
|||
218, 220, 223, 225, 227, 230, 232, 235, 237, 240, 242, 245, 247, 250, 252,
|
||||
255};
|
||||
|
||||
/* Declare external methods required by the Adafruit_NeoPixel implementation
|
||||
for specific hardware/library versions
|
||||
*/
|
||||
#if defined(ESP32)
|
||||
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0)
|
||||
extern "C" void espInit();
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*!
|
||||
@brief Class that stores state and functions for interacting with
|
||||
Adafruit NeoPixels and compatible devices.
|
||||
|
@ -407,7 +398,7 @@
|
|||
volatile uint8_t *port; ///< Output PORT register
|
||||
uint8_t pinMask; ///< Output PORT bitmask
|
||||
#endif
|
||||
#if defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_ARDUINO_CORE_STM32) || defined(ARDUINO_ARCH_CH32)
|
||||
#if defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_ARDUINO_CORE_STM32)
|
||||
GPIO_TypeDef *gpioPort; ///< Output GPIO PORT
|
||||
uint32_t gpioPin; ///< Output GPIO PIN
|
||||
#endif
|
||||
|
@ -419,4 +410,3 @@
|
|||
};
|
||||
|
||||
#endif // ADAFRUIT_NEOPIXEL_H
|
||||
|
|
@ -20,109 +20,13 @@
|
|||
#if defined(ESP32)
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "driver/rmt.h"
|
||||
|
||||
#if defined(ESP_IDF_VERSION)
|
||||
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 0, 0)
|
||||
#define HAS_ESP_IDF_4
|
||||
#endif
|
||||
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0)
|
||||
#define HAS_ESP_IDF_5
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef HAS_ESP_IDF_5
|
||||
|
||||
static SemaphoreHandle_t show_mutex = NULL;
|
||||
|
||||
void espShow(uint8_t pin, uint8_t *pixels, uint32_t numBytes, boolean is800KHz) {
|
||||
// Note: Because rmtPin is shared between all instances, we will
|
||||
// end up releasing/initializing the RMT channels each time we
|
||||
// invoke on different pins. This is probably ok, just not
|
||||
// efficient. led_data is shared between all instances but will
|
||||
// be allocated with enough space for the largest instance; data
|
||||
// is not used beyond the mutex lock so this should be fine.
|
||||
|
||||
#define SEMAPHORE_TIMEOUT_MS 50
|
||||
|
||||
static rmt_data_t *led_data = NULL;
|
||||
static uint32_t led_data_size = 0;
|
||||
static int rmtPin = -1;
|
||||
|
||||
if (show_mutex && xSemaphoreTake(show_mutex, SEMAPHORE_TIMEOUT_MS / portTICK_PERIOD_MS) == pdTRUE) {
|
||||
uint32_t requiredSize = numBytes * 8;
|
||||
if (requiredSize > led_data_size) {
|
||||
free(led_data);
|
||||
if (led_data = (rmt_data_t *)malloc(requiredSize * sizeof(rmt_data_t))) {
|
||||
led_data_size = requiredSize;
|
||||
} else {
|
||||
led_data_size = 0;
|
||||
}
|
||||
} else if (requiredSize == 0) {
|
||||
// To release RMT resources (RMT channels and led_data), call
|
||||
// .updateLength(0) to set number of pixels/bytes to zero,
|
||||
// then call .show() to invoke this code and free resources.
|
||||
free(led_data);
|
||||
led_data = NULL;
|
||||
if (rmtPin >= 0) {
|
||||
rmtDeinit(rmtPin);
|
||||
rmtPin = -1;
|
||||
}
|
||||
led_data_size = 0;
|
||||
}
|
||||
|
||||
if (led_data_size > 0 && requiredSize <= led_data_size) {
|
||||
if (pin != rmtPin) {
|
||||
if (rmtPin >= 0) {
|
||||
rmtDeinit(rmtPin);
|
||||
rmtPin = -1;
|
||||
}
|
||||
if (!rmtInit(pin, RMT_TX_MODE, RMT_MEM_NUM_BLOCKS_1, 10000000)) {
|
||||
log_e("Failed to init RMT TX mode on pin %d", pin);
|
||||
return;
|
||||
}
|
||||
rmtPin = pin;
|
||||
}
|
||||
|
||||
if (rmtPin >= 0) {
|
||||
int i=0;
|
||||
for (int b=0; b < numBytes; b++) {
|
||||
for (int bit=0; bit<8; bit++){
|
||||
if ( pixels[b] & (1<<(7-bit)) ) {
|
||||
led_data[i].level0 = 1;
|
||||
led_data[i].duration0 = 8;
|
||||
led_data[i].level1 = 0;
|
||||
led_data[i].duration1 = 4;
|
||||
} else {
|
||||
led_data[i].level0 = 1;
|
||||
led_data[i].duration0 = 4;
|
||||
led_data[i].level1 = 0;
|
||||
led_data[i].duration1 = 8;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
rmtWrite(pin, led_data, numBytes * 8, RMT_WAIT_FOR_EVER);
|
||||
}
|
||||
}
|
||||
|
||||
xSemaphoreGive(show_mutex);
|
||||
}
|
||||
}
|
||||
|
||||
// To avoid race condition initializing the mutex, all instances of
|
||||
// Adafruit_NeoPixel must be constructed before launching and child threads
|
||||
void espInit() {
|
||||
if (!show_mutex) {
|
||||
show_mutex = xSemaphoreCreateMutex();
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include "driver/rmt.h"
|
||||
|
||||
|
||||
// This code is adapted from the ESP-IDF v3.4 RMT "led_strip" example, altered
|
||||
// to work with the Arduino version of the ESP-IDF (3.2)
|
||||
|
@ -152,9 +56,8 @@
|
|||
|
||||
bool rmt_reserved_channels[ADAFRUIT_RMT_CHANNEL_MAX];
|
||||
|
||||
static void IRAM_ATTR ws2812_rmt_adapter(const void *src, rmt_item32_t *dest, size_t src_size,
|
||||
size_t wanted_num, size_t *translated_size, size_t *item_num)
|
||||
{
|
||||
static void IRAM_ATTR ws2812_rmt_adapter(const void* src, rmt_item32_t* dest, size_t src_size, size_t wanted_num,
|
||||
size_t* translated_size, size_t* item_num) {
|
||||
if (src == NULL || dest == NULL) {
|
||||
*translated_size = 0;
|
||||
*item_num = 0;
|
||||
|
@ -191,13 +94,13 @@
|
|||
if (rmt_initialized == false) {
|
||||
// Reserve channel
|
||||
rmt_channel_t channel = 0;
|
||||
|
||||
#if defined(HAS_ESP_IDF_4)
|
||||
rmt_config_t config = RMT_DEFAULT_CONFIG_TX(pin, channel);
|
||||
config.clk_div = 2;
|
||||
#else
|
||||
// Match default TX config from ESP-IDF version 3.4
|
||||
rmt_config_t config = {
|
||||
.rmt_mode = RMT_MODE_TX,
|
||||
rmt_config_t config = {.rmt_mode = RMT_MODE_TX,
|
||||
.channel = channel,
|
||||
.gpio_num = pin,
|
||||
.clk_div = 2,
|
||||
|
@ -210,8 +113,7 @@
|
|||
.carrier_en = false,
|
||||
.loop_en = false,
|
||||
.idle_output_en = true,
|
||||
}
|
||||
};
|
||||
}};
|
||||
#endif
|
||||
rmt_config(&config);
|
||||
rmt_driver_install(config.channel, 0, 0);
|
||||
|
@ -256,17 +158,6 @@
|
|||
|
||||
// Write and wait to finish
|
||||
rmt_write_sample(0, pixels, (size_t)numBytes, false);
|
||||
//rmt_wait_tx_done(config.channel, pdMS_TO_TICKS(100));
|
||||
|
||||
// Free channel again
|
||||
//rmt_driver_uninstall(config.channel);
|
||||
//rmt_reserved_channels[channel] = false;
|
||||
|
||||
//gpio_set_direction(pin, GPIO_MODE_OUTPUT);
|
||||
}
|
||||
|
||||
#endif // ifndef IDF5
|
||||
|
||||
|
||||
#endif // ifdef(ESP32)
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue