stm32: codegen interrupts
This commit is contained in:
@ -20,7 +20,7 @@ embassy = { version = "0.1.0", path = "../embassy", features = ["defmt", "defmt-
|
||||
embassy-traits = { version = "0.1.0", path = "../embassy-traits", features = ["defmt"] }
|
||||
embassy-stm32 = { version = "0.1.0", path = "../embassy-stm32", features = ["defmt", "defmt-trace", "stm32f429zi"] }
|
||||
embassy-extras = {version = "0.1.0", path = "../embassy-extras" }
|
||||
stm32f4 = { version = "0.13", features = ["stm32f429", "rt"] }
|
||||
stm32f4 = { version = "0.13", features = ["stm32f429"] }
|
||||
|
||||
defmt = "0.2.0"
|
||||
defmt-rtt = "0.2.0"
|
||||
|
@ -37,7 +37,8 @@ fn main() -> ! {
|
||||
w
|
||||
});
|
||||
|
||||
let p = embassy_stm32::Peripherals::take().unwrap();
|
||||
let p = embassy_stm32::init(Default::default());
|
||||
|
||||
let mut led = Output::new(p.PB7, Level::High);
|
||||
|
||||
loop {
|
||||
|
@ -37,7 +37,8 @@ fn main() -> ! {
|
||||
w
|
||||
});
|
||||
|
||||
let p = embassy_stm32::Peripherals::take().unwrap();
|
||||
let p = embassy_stm32::init(Default::default());
|
||||
|
||||
let button = Input::new(p.PC13, Pull::Down);
|
||||
let mut led1 = Output::new(p.PB0, Level::High);
|
||||
let _led2 = Output::new(p.PB7, Level::High);
|
||||
|
@ -16,12 +16,12 @@ use embassy_traits::gpio::{WaitForFallingEdge, WaitForRisingEdge};
|
||||
use example_common::*;
|
||||
|
||||
use cortex_m_rt::entry;
|
||||
use pac::{interrupt, NVIC};
|
||||
use stm32f4::stm32f429 as pac;
|
||||
|
||||
#[embassy::task]
|
||||
async fn main_task() {
|
||||
let p = embassy_stm32::Peripherals::take().unwrap();
|
||||
let p = embassy_stm32::init(Default::default());
|
||||
|
||||
let button = Input::new(p.PC13, Pull::Down);
|
||||
let mut button = ExtiInput::new(button, p.EXTI13);
|
||||
|
||||
@ -74,56 +74,9 @@ fn main() -> ! {
|
||||
|
||||
unsafe { embassy::time::set_clock(&ZeroClock) };
|
||||
|
||||
unsafe {
|
||||
NVIC::unmask(interrupt::EXTI0);
|
||||
NVIC::unmask(interrupt::EXTI1);
|
||||
NVIC::unmask(interrupt::EXTI2);
|
||||
NVIC::unmask(interrupt::EXTI3);
|
||||
NVIC::unmask(interrupt::EXTI4);
|
||||
NVIC::unmask(interrupt::EXTI9_5);
|
||||
NVIC::unmask(interrupt::EXTI15_10);
|
||||
}
|
||||
|
||||
let executor = EXECUTOR.put(Executor::new());
|
||||
|
||||
executor.run(|spawner| {
|
||||
unwrap!(spawner.spawn(main_task()));
|
||||
})
|
||||
}
|
||||
|
||||
// TODO for now irq handling is done by user code using the old pac, until we figure out how interrupts work in the metapac
|
||||
|
||||
#[interrupt]
|
||||
unsafe fn EXTI0() {
|
||||
exti::on_irq()
|
||||
}
|
||||
|
||||
#[interrupt]
|
||||
unsafe fn EXTI1() {
|
||||
exti::on_irq()
|
||||
}
|
||||
|
||||
#[interrupt]
|
||||
unsafe fn EXTI2() {
|
||||
exti::on_irq()
|
||||
}
|
||||
|
||||
#[interrupt]
|
||||
unsafe fn EXTI3() {
|
||||
exti::on_irq()
|
||||
}
|
||||
|
||||
#[interrupt]
|
||||
unsafe fn EXTI4() {
|
||||
exti::on_irq()
|
||||
}
|
||||
|
||||
#[interrupt]
|
||||
unsafe fn EXTI9_5() {
|
||||
exti::on_irq()
|
||||
}
|
||||
|
||||
#[interrupt]
|
||||
unsafe fn EXTI15_10() {
|
||||
exti::on_irq()
|
||||
}
|
||||
|
@ -15,12 +15,11 @@ use embassy_stm32::usart::{Config, Uart};
|
||||
use example_common::*;
|
||||
|
||||
use cortex_m_rt::entry;
|
||||
use pac::{interrupt, NVIC};
|
||||
use stm32f4::stm32f429 as pac;
|
||||
|
||||
#[embassy::task]
|
||||
async fn main_task() {
|
||||
let p = embassy_stm32::Peripherals::take().unwrap();
|
||||
let p = embassy_stm32::init(Default::default());
|
||||
|
||||
let config = Config::default();
|
||||
let usart = Uart::new(p.USART3, p.PD9, p.PD8, NoPin, NoPin, config);
|
||||
@ -61,10 +60,13 @@ fn main() -> ! {
|
||||
w
|
||||
});
|
||||
pp.RCC.apb2enr.modify(|_, w| {
|
||||
w.usart3en().enabled();
|
||||
w.syscfgen().enabled();
|
||||
w
|
||||
});
|
||||
pp.RCC.apb1enr.modify(|_, w| {
|
||||
w.usart3en().enabled();
|
||||
w
|
||||
});
|
||||
|
||||
unsafe { embassy::time::set_clock(&ZeroClock) };
|
||||
|
||||
|
Reference in New Issue
Block a user