From ad33d0de79ebc4a862832b10be546c4da0092162 Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Wed, 23 Sep 2026 16:42:50 +0300 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=88=D0=B8=D0=B2=D0=BA=D0=B8=20=D0=BF=D0=BE=D0=B4=20c3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OpticalChannelTester/Config.h | 3 ++- OpticalChannelTester/DriverTest.cpp | 18 ++++++++++++++---- PCB/OptoTest.PcbDoc | Bin 4072960 -> 4074496 bytes PCB/OptoTest.SchDoc | Bin 194560 -> 194560 bytes 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/OpticalChannelTester/Config.h b/OpticalChannelTester/Config.h index 244b9ac..82d53de 100644 --- a/OpticalChannelTester/Config.h +++ b/OpticalChannelTester/Config.h @@ -5,6 +5,7 @@ // ------------------------- Hardware configuration ------------------------- // Enabled for the hand-wired prototype. Comment out for the production PCB. // Both profiles map S3 signals by physical header position with 5V/GND aligned. + //#define MAKETKA // Select exactly one populated receiver circuit. Use @@ -12,7 +13,7 @@ #define BOARD_RX_INTERFACE_ADC 1 #define BOARD_RX_INTERFACE_DIGITAL 2 #ifndef BOARD_RX_INTERFACE -#define BOARD_RX_INTERFACE BOARD_RX_INTERFACE_DIGITAL +#define BOARD_RX_INTERFACE BOARD_RX_INTERFACE_ADC #endif #if BOARD_RX_INTERFACE != BOARD_RX_INTERFACE_ADC && \ diff --git a/OpticalChannelTester/DriverTest.cpp b/OpticalChannelTester/DriverTest.cpp index 0d46b83..583635e 100644 --- a/OpticalChannelTester/DriverTest.cpp +++ b/OpticalChannelTester/DriverTest.cpp @@ -10,15 +10,26 @@ #include #include #include +#if CONFIG_IDF_TARGET_ESP32C3 +#include +#endif static inline uint32_t IRAM_ATTR maskAllInterrupts() { +#if CONFIG_IDF_TARGET_ESP32C3 + return RV_CLEAR_CSR(mstatus, MSTATUS_MIE); +#else uint32_t state; asm volatile("rsil %0, 15" : "=a"(state) :: "memory"); return state; +#endif } static inline void IRAM_ATTR restoreInterrupts(uint32_t state) { +#if CONFIG_IDF_TARGET_ESP32C3 + RV_SET_CSR(mstatus, state & MSTATUS_MIE); +#else asm volatile("wsr %0, ps\nrsync" :: "a"(state) : "memory"); +#endif } void DriverEdgeStats::reset() { @@ -193,7 +204,7 @@ void IRAM_ATTR DriverTest::pollTaskLoop() { constexpr uint32_t PIN_MASK = (1UL << GPIO_PWM) | (1UL << GPIO_RX); for (;;) { ulTaskNotifyTake(pdTRUE, portMAX_DELAY); - uint32_t levels = GPIO.in & PIN_MASK; + uint32_t levels = GPIO.in.val & PIN_MASK; uint32_t nextStart = 0; uint32_t windowEnd = 0; uint32_t lastTxStart = 0; @@ -205,7 +216,7 @@ void IRAM_ATTR DriverTest::pollTaskLoop() { uint32_t interruptState = 0; auto sampleOnce = [&]() { - const uint32_t current = GPIO.in & PIN_MASK; + const uint32_t current = GPIO.in.val & PIN_MASK; if (current == levels) return; const uint32_t now = esp_cpu_get_cycle_count(); const uint32_t changed = current ^ levels; @@ -636,8 +647,7 @@ void IRAM_ATTR DriverTest::recordRaw(uint32_t tick, bool rising, return; } ring_[write] = {tick, rising, source}; - asm volatile("memw" ::: "memory"); - ringWrite_ = next; + __atomic_store_n(&ringWrite_, next, __ATOMIC_RELEASE); } size_t DriverTest::readRaw(TimedEvent *events, size_t capacity, diff --git a/PCB/OptoTest.PcbDoc b/PCB/OptoTest.PcbDoc index ab9aaa2c89e6aeb7b518e38fd7f606cfa4617bef..a5c0e511cc314e42d00c887fb912e827b820cd06 100644 GIT binary patch delta 14743 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 KSxBPZ|Nj90N3aS2 diff --git a/PCB/OptoTest.SchDoc b/PCB/OptoTest.SchDoc index fbedecc097596cc99db08a90038cd360edbb26f4..fbc66d78e64a68850bea2e66e28c911cf1e245d2 100644 GIT binary patch delta 5850 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 delta 5663 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 HUqJr_6XWzn