From d12bc9785399991065e511efbea34f0138c7645e Mon Sep 17 00:00:00 2001 From: MathisDerooNXP <52401665+MathisDeroo@users.noreply.github.com> Date: Wed, 26 Nov 2025 10:05:16 -0800 Subject: Add GPIO interrupt support and embedded-hal-async trait implementation (#38) * Add GPIO interrupt support and embedded-hal-async trait implementation Signed-off-by: Mathis Deroo * Run cargo fmt * Improve GPIO driver interrupt mechanism and example - GPIO interrupt managed internally at the HAL level, - Renamed and cleaned gpio_interrupt example; now button_async.rs, - Use BitIter instead of simple for loop in the irq handler, - Fix comments and add "rt" wrappen to GPIO IRQ handler. Signed-off-by: Mathis Deroo * Modify INTERRUPT_DETECTED (AtomicBool to AtomicU32) to work with pin number and not only port number interrupt Signed-off-by: Mathis Deroo * add embedded_hal_async::digital::* traits Signed-off-by: Mathis Deroo * Update irq_handler with BitIter loop Co-authored-by: Felipe Balbi * Add suggested changes Signed-off-by: Mathis Deroo * cargo fmt Signed-off-by: Felipe Balbi * WIP: Modify Wakers from AtomicWaker to WaitMap, with pin number (per PORT) as key Signed-off-by: Mathis Deroo * Tweak maitake-sync usage * Improve docs * refactor a bit * Move all of the async+interrupt stuff into a module * Remove defmt debug traces Signed-off-by: Mathis Deroo * cargo vet * Move e-hal-async impls into the gated block * "rt", begone! --------- Signed-off-by: Mathis Deroo Signed-off-by: Felipe Balbi Co-authored-by: Felipe Balbi Co-authored-by: Felipe Balbi Co-authored-by: Felipe Balbi Co-authored-by: James Munns --- Cargo.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Cargo.toml') diff --git a/Cargo.toml b/Cargo.toml index cda340d02..96b7d6b0f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,8 @@ categories = ["embedded", "hardware-support", "no-std"] [dependencies] cortex-m = { version = "0.7", features = ["critical-section-single-core"] } -cortex-m-rt = { version = "0.7" } +# If you would like "device" to be an optional feature, please open an issue. +cortex-m-rt = { version = "0.7", features = ["device"] } critical-section = "1.2.0" defmt = { version = "1.0", optional = true } embassy-embedded-hal = "0.5.0" @@ -25,6 +26,7 @@ heapless = "0.8" mcxa-pac = { git = "https://github.com/OpenDevicePartnership/mcxa-pac", features = ["rt", "critical-section"], version = "0.1.0" } nb = "1.1.0" paste = "1.0.15" +maitake-sync = { version = "0.2.2", default-features = false, features = ["critical-section", "no-cache-pad"] } # `time` dependencies embassy-time = { version = "0.5.0", optional = true } @@ -37,8 +39,6 @@ default = [] # Use with one logger feature: defmt-rtt (preferred) or defmt-uart (fallback) defmt = ["dep:defmt", "mcxa-pac/defmt"] -rt = ["cortex-m-rt/device"] - unstable-pac = [] # Embassy time -- cgit