diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-08-18 15:40:24 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-08-18 15:40:24 +1000 |
| commit | cad70605401e8fa30811e8c68a0cc5c014438942 (patch) | |
| tree | 42307c27b01ce80b1e9038dea6dca2d4aa94eae1 /src/drivers/gpios.cpp | |
| parent | 697ec3c5843c66253f73572c26b9b4885680d56c (diff) | |
| download | tangara-fw-cad70605401e8fa30811e8c68a0cc5c014438942.tar.gz | |
Add interrupts for samd changes
Diffstat (limited to 'src/drivers/gpios.cpp')
| -rw-r--r-- | src/drivers/gpios.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
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<uint8_t, uint8_t> 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<SemaphoreHandle_t>(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<uint64_t>(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 |
