From cad70605401e8fa30811e8c68a0cc5c014438942 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Fri, 18 Aug 2023 15:40:24 +1000 Subject: Add interrupts for samd changes --- src/drivers/gpios.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'src/drivers/gpios.cpp') diff --git a/src/drivers/gpios.cpp b/src/drivers/gpios.cpp index f6293697..412c091f 100644 --- a/src/drivers/gpios.cpp +++ b/src/drivers/gpios.cpp @@ -58,7 +58,9 @@ constexpr std::pair unpack(uint16_t ba) { return std::pair((uint8_t)ba, (uint8_t)(ba >> 8)); } -void interrupt_isr(void* arg) { +SemaphoreHandle_t Gpios::sReadPending; + +static void interrupt_isr(void* arg) { SemaphoreHandle_t sem = reinterpret_cast(arg); xSemaphoreGive(sem); } @@ -73,10 +75,7 @@ auto Gpios::Create() -> Gpios* { return instance; } -Gpios::Gpios() - : ports_(pack(kPortADefault, kPortBDefault)), - inputs_(0), - read_pending_(xSemaphoreCreateBinary()) { +Gpios::Gpios() : ports_(pack(kPortADefault, kPortBDefault)), inputs_(0) { gpio_config_t config{ .pin_bit_mask = static_cast(1) << GPIO_NUM_34, .mode = GPIO_MODE_INPUT, @@ -87,6 +86,7 @@ Gpios::Gpios() gpio_config(&config); gpio_install_isr_service(ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_SHARED | ESP_INTR_FLAG_IRAM); + gpio_isr_handler_add(GPIO_NUM_34, &interrupt_isr, sReadPending); } Gpios::~Gpios() { @@ -141,8 +141,9 @@ auto Gpios::Read() -> bool { return true; } -auto Gpios::InstallReadPendingISR() -> void { - gpio_isr_handler_add(GPIO_NUM_34, &interrupt_isr, read_pending_); +auto Gpios::CreateReadPending() -> SemaphoreHandle_t { + sReadPending = xSemaphoreCreateBinary(); + return sReadPending; } } // namespace drivers -- cgit v1.2.3