forked from Makuna/NeoPixelBus
compiles
This commit is contained in:
@@ -63,7 +63,7 @@ License along with NeoPixel. If not, see
|
||||
#include "methods/ESP/ESP32/Core_2_x/NeoEsp32RmtMethod.h"
|
||||
#else
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32C2)
|
||||
#include "methods/ESP/ESP32/NeoEsp32RmtMethod.h" // every other SOC
|
||||
#include "methods/ESP/ESP32/NeoEsp32RmtXMethod.h" // every other SOC
|
||||
#else //CONFIG_IDF_TARGET_ESP32C2
|
||||
#include "methods/ESP/ESP32/NeoEsp32SpiMethod.h" // ESP32C2
|
||||
#endif //CONFIG_IDF_TARGET_ESP32C2
|
||||
|
@@ -29,6 +29,8 @@ License along with NeoPixel. If not, see
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
#if ESP_IDF_VERSION_MAJOR < 5
|
||||
|
||||
#if defined(ARDUINO_ARCH_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32H2)
|
||||
|
||||
#include "../../../../NeoSettings.h"
|
||||
@@ -373,4 +375,5 @@ void NeoEsp32RmtInvertedSpeedGs1903::Translate(const void* src,
|
||||
RmtBit0, RmtBit1, RmtDurationReset);
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
@@ -29,46 +29,40 @@ License along with NeoPixel. If not, see
|
||||
class NeoEsp32RmtSpeed
|
||||
{
|
||||
public:
|
||||
// next section is probably not needed anymore for IDF 5.1
|
||||
//
|
||||
// ClkDiv of 2 provides for good resolution and plenty of reset resolution; but
|
||||
// a ClkDiv of 1 will provide enough space for the longest reset and does show
|
||||
// little better pulse accuracy
|
||||
const static uint8_t RmtClockDivider = 2;
|
||||
const static uint32_t RmtCpu = 80000000L; // 80 mhz RMT clock
|
||||
const static uint32_t NsPerSecond = 1000000000L;
|
||||
const static uint32_t RmtTicksPerSecond = (RmtCpu / RmtClockDivider);
|
||||
const static uint32_t NsPerRmtTick = (NsPerSecond / RmtTicksPerSecond); // about 25
|
||||
|
||||
inline constexpr static uint32_t FromNs(uint32_t ns)
|
||||
{
|
||||
return ns / NsPerRmtTick;
|
||||
}
|
||||
|
||||
protected:
|
||||
const static uint32_t RmtCpu = 80000000L; // 80 mhz RMT clock
|
||||
const static uint32_t NsPerSecond = 1000000000L;
|
||||
const static uint32_t RmtTicksPerSecond = (RmtCpu / RmtClockDivider);
|
||||
const static uint32_t NsPerRmtTick = (NsPerSecond / RmtTicksPerSecond); // about 25
|
||||
// end of deprecated section
|
||||
|
||||
};
|
||||
|
||||
class NeoEsp32RmtSpeedBase : public NeoEsp32RmtSpeed
|
||||
{
|
||||
public:
|
||||
// this is used rather than the rmt_symbol_word_t as you can't correctly initialize
|
||||
// it as a static constexpr within the template
|
||||
inline constexpr static uint32_t Item32Val(uint16_t nsHigh, uint16_t nsLow)
|
||||
{
|
||||
return (FromNs(nsLow) << 16) | (1 << 15) | (FromNs(nsHigh));
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
class NeoEsp32RmtSpeedBase : public NeoEsp32RmtSpeed
|
||||
{
|
||||
public:
|
||||
const static bool Inverted = false;
|
||||
};
|
||||
|
||||
class NeoEsp32RmtInvertedSpeedBase : public NeoEsp32RmtSpeed
|
||||
{
|
||||
public:
|
||||
// this is used rather than the rmt_symbol_word_t as you can't correctly initialize
|
||||
// it as a static constexpr within the template
|
||||
inline constexpr static uint32_t Item32Val(uint16_t nsHigh, uint16_t nsLow)
|
||||
{
|
||||
return (FromNs(nsLow) << 16) | (1 << 31) | (FromNs(nsHigh));
|
||||
}
|
||||
const static bool Inverted = true;
|
||||
};
|
||||
|
||||
class NeoEsp32RmtSpeedWs2811 : public NeoEsp32RmtSpeedBase
|
||||
@@ -237,4 +231,3 @@ public:
|
||||
const static uint16_t RmtDurationReset = FromNs(80000); // 80us
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@@ -28,18 +28,6 @@ License along with NeoPixel. If not, see
|
||||
|
||||
#if defined(ARDUINO_ARCH_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32C2)
|
||||
|
||||
/* General Reference documentation for the APIs used in this implementation
|
||||
LOW LEVEL: (what is actually used)
|
||||
DOCS: https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/rmt.html
|
||||
EXAMPLE: https://github.com/espressif/esp-idf/blob/826ff7186ae07dc81e960a8ea09ebfc5304bfb3b/examples/peripherals/rmt_tx/main/rmt_tx_main.c
|
||||
|
||||
HIGHER LEVEL:
|
||||
NO TRANSLATE SUPPORT so this was not used
|
||||
NOTE: https://github.com/espressif/arduino-esp32/commit/50d142950d229b8fabca9b749dc4a5f2533bc426
|
||||
Esp32-hal-rmt.h
|
||||
Esp32-hal-rmt.c
|
||||
*/
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "NeoEsp32RmtSpeed.h"
|
||||
|
||||
@@ -53,8 +41,6 @@ extern "C"
|
||||
#include "esp_check.h"
|
||||
}
|
||||
|
||||
#define RMT_LED_STRIP_RESOLUTION_HZ 40000000 // 40MHz resolution - setting of the "old" driver
|
||||
|
||||
struct led_strip_encoder_config_t
|
||||
{
|
||||
uint32_t resolution; /*!< Encoder resolution, in Hz */
|
||||
@@ -192,7 +178,7 @@ template<typename T_SPEED> class NeoEsp32RmtMethodBase
|
||||
public:
|
||||
typedef NeoNoSettings SettingsObject;
|
||||
|
||||
NeoEsp32RmtMethodBase(uint8_t pin, uint16_t pixelCount, size_t elementSize, size_t settingsSize, NeoBusChannel channel = 0) :
|
||||
NeoEsp32RmtMethodBase(uint8_t pin, uint16_t pixelCount, size_t elementSize, size_t settingsSize, NeoBusChannel channel = NeoBusChannel_0) :
|
||||
_sizeData(pixelCount* elementSize + settingsSize),
|
||||
_pin(pin),
|
||||
_channel(NULL)
|
||||
@@ -228,14 +214,14 @@ public:
|
||||
config.clk_src = RMT_CLK_SRC_DEFAULT;
|
||||
config.gpio_num = static_cast<gpio_num_t>(_pin);
|
||||
config.mem_block_symbols = 192; // memory block size, 64 * 4 = 256 Bytes
|
||||
config.resolution_hz = RMT_LED_STRIP_RESOLUTION_HZ; // 1 MHz tick resolution, i.e., 1 tick = 1 µs
|
||||
config.resolution_hz = T_SPEED::RmtTicksPerSecond; // 1 MHz tick resolution, i.e., 1 tick = 1 µs
|
||||
config.trans_queue_depth = 4; // set the number of transactions that can pend in the background
|
||||
config.flags.invert_out = false; // do not invert output signal
|
||||
config.flags.invert_out = T_SPEED::Inverted; // do not invert output signal
|
||||
config.flags.with_dma = false; // do not need DMA backend
|
||||
|
||||
ret += rmt_new_tx_channel(&config, &_channel);
|
||||
led_strip_encoder_config_t encoder_config = {};
|
||||
encoder_config.resolution = RMT_LED_STRIP_RESOLUTION_HZ;
|
||||
encoder_config.resolution = T_SPEED::RmtTicksPerSecond;
|
||||
|
||||
_tx_config.loop_count = 0; //no loop
|
||||
|
||||
@@ -259,7 +245,8 @@ public:
|
||||
{
|
||||
// AddLog(2,"__ %u", _sizeData);
|
||||
// now start the RMT transmit with the editing buffer before we swap
|
||||
esp_err_t ret = rmt_transmit(_channel, _led_encoder, _dataEditing, _sizeData, &_tx_config); // 3 for _sizeData
|
||||
// esp_err_t ret =
|
||||
rmt_transmit(_channel, _led_encoder, _dataEditing, _sizeData, &_tx_config); // 3 for _sizeData
|
||||
// AddLog(2,"rmt_transmit: %u", ret);
|
||||
if (maintainBufferConsistency)
|
||||
{
|
||||
@@ -317,6 +304,13 @@ private:
|
||||
}
|
||||
};
|
||||
|
||||
// NOTE: While these are multi-instance auto channel selecting, there are limits
|
||||
// to the number of times based on the specific ESP32 model it is compiled for
|
||||
// ESP32 - 8x (beyond 4x may experience issues)
|
||||
// ESP32S2 - 4x
|
||||
// ESP32C3 - 2x
|
||||
// ESP32S3 - 4x
|
||||
|
||||
// normal
|
||||
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtSpeedWs2811> NeoEsp32RmtXWs2811Method;
|
||||
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtSpeedWs2812x> NeoEsp32RmtXWs2812xMethod;
|
||||
@@ -329,8 +323,6 @@ typedef NeoEsp32RmtMethodBase<NeoEsp32RmtSpeedTx1812> NeoEsp32RmtXTx1812Method;
|
||||
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtSpeed800Kbps> NeoEsp32RmtX800KbpsMethod;
|
||||
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtSpeed400Kbps> NeoEsp32RmtX400KbpsMethod;
|
||||
|
||||
#endif // !defined(CONFIG_IDF_TARGET_ESP32S2)
|
||||
#endif // !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
|
||||
// inverted
|
||||
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtInvertedSpeedWs2811> NeoEsp32RmtXWs2811InvertedMethod;
|
||||
@@ -344,9 +336,6 @@ typedef NeoEsp32RmtMethodBase<NeoEsp32RmtInvertedSpeedTx1812> NeoEsp32RmtXTx1812
|
||||
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtInvertedSpeed800Kbps> NeoEsp32RmtX800KbpsInvertedMethod;
|
||||
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtInvertedSpeed400Kbps> NeoEsp32RmtX400KbpsInvertedMethod;
|
||||
|
||||
#endif // !defined(CONFIG_IDF_TARGET_ESP32S2)
|
||||
#endif // !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
|
||||
|
||||
#if defined(NEOPIXEL_ESP32_RMT_DEFAULT) || defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C6) || defined(CONFIG_IDF_TARGET_ESP32S3)
|
||||
|
||||
|
Reference in New Issue
Block a user