gpt4 book ai didi

rust - 如何从 GPIO 触发中断

转载 作者:行者123 更新时间:2023-11-29 08:27:01 25 4
gpt4 key购买 nike

<分区>

我正在将玩具应用程序移植到 RTFM框架,并且很难弄清楚如何通过 GPIO 触发中断。

fn init(p: init::Peripherals, _r: init::Resources) -> init::LateResources {
let dp: stm32f103xx::Peripherals = p.device;
let mut rcc = dp.RCC.constrain();
let mut gpioa = dp.GPIOA.split(&mut rcc.apb2);
let int = gpioa.pa0.into_floating_input(&mut gpioa.crl);
dp.EXTI.imr.write(|w| w.mr0().set_bit()); // unmask the interrupt (EXTI)
dp.EXTI.ftsr.write(|w| w.tr0().set_bit()); // trigger interrupt on falling edge

init::LateResources {
EXTI: dp.EXTI,
INT: int
}
}

fn idle(t: &mut Threshold, mut r: idle::Resources) -> ! {
loop { rtfm::wfi(); }
}

fn exti0(_t: &mut Threshold, mut r: EXTI0::Resources) {
// never called
}

此设置使我能够触发中断,但在应该调用处理程序时有一个 SEGV。我转储了二进制文件,在 INTERRUPTS 部分中,ext0 中断 8000058 指向地址 080024e7。我在二进制文件中找不到与 addr2line 对应的函数,所以它可能是链接器错误?

我的印象是 RTFM 将中断映射到任务名称,我确实有一个名为“EXTI0”的任务。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com