diff options
| author | Dario Nieuwenhuis <[email protected]> | 2020-12-29 15:32:23 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-12-29 15:32:23 +0100 |
| commit | 2bf9b14ef07c4d2a33ee8a45b2f07b4cdd050e9e (patch) | |
| tree | 8229727035f1aa26a9477fa702f02dd53592dd99 /examples/src/bin/multiprio.rs | |
| parent | b01a88a839c2ac1eec68442f6cddf0c0a887cfa7 (diff) | |
| parent | 7dc81faa4ec46074c3500a868df18e0d123f0ba6 (diff) | |
Merge pull request #7 from akiles/irq
Owned IRQs
Diffstat (limited to 'examples/src/bin/multiprio.rs')
| -rw-r--r-- | examples/src/bin/multiprio.rs | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/examples/src/bin/multiprio.rs b/examples/src/bin/multiprio.rs index be7e91a9d..c821e3dba 100644 --- a/examples/src/bin/multiprio.rs +++ b/examples/src/bin/multiprio.rs | |||
| @@ -61,7 +61,9 @@ | |||
| 61 | mod example_common; | 61 | mod example_common; |
| 62 | use example_common::*; | 62 | use example_common::*; |
| 63 | 63 | ||
| 64 | use cortex_m::peripheral::NVIC; | ||
| 64 | use cortex_m_rt::entry; | 65 | use cortex_m_rt::entry; |
| 66 | use defmt::panic; | ||
| 65 | use nrf52840_hal::clocks; | 67 | use nrf52840_hal::clocks; |
| 66 | 68 | ||
| 67 | use embassy::executor::{task, Executor}; | 69 | use embassy::executor::{task, Executor}; |
| @@ -130,7 +132,7 @@ fn main() -> ! { | |||
| 130 | .set_lfclk_src_external(clocks::LfOscConfiguration::NoExternalNoBypass) | 132 | .set_lfclk_src_external(clocks::LfOscConfiguration::NoExternalNoBypass) |
| 131 | .start_lfclk(); | 133 | .start_lfclk(); |
| 132 | 134 | ||
| 133 | let rtc = RTC.put(rtc::RTC::new(p.RTC1)); | 135 | let rtc = RTC.put(rtc::RTC::new(p.RTC1, interrupt::take!(RTC1))); |
| 134 | rtc.start(); | 136 | rtc.start(); |
| 135 | unsafe { embassy::time::set_clock(rtc) }; | 137 | unsafe { embassy::time::set_clock(rtc) }; |
| 136 | 138 | ||
| @@ -138,17 +140,20 @@ fn main() -> ! { | |||
| 138 | let executor_low = EXECUTOR_LOW.put(Executor::new_with_alarm(alarm_low, cortex_m::asm::sev)); | 140 | let executor_low = EXECUTOR_LOW.put(Executor::new_with_alarm(alarm_low, cortex_m::asm::sev)); |
| 139 | let alarm_med = ALARM_MED.put(rtc.alarm1()); | 141 | let alarm_med = ALARM_MED.put(rtc.alarm1()); |
| 140 | let executor_med = EXECUTOR_MED.put(Executor::new_with_alarm(alarm_med, || { | 142 | let executor_med = EXECUTOR_MED.put(Executor::new_with_alarm(alarm_med, || { |
| 141 | interrupt::pend(interrupt::SWI0_EGU0) | 143 | NVIC::pend(interrupt::SWI0_EGU0) |
| 142 | })); | 144 | })); |
| 143 | let alarm_high = ALARM_HIGH.put(rtc.alarm2()); | 145 | let alarm_high = ALARM_HIGH.put(rtc.alarm2()); |
| 144 | let executor_high = EXECUTOR_HIGH.put(Executor::new_with_alarm(alarm_high, || { | 146 | let executor_high = EXECUTOR_HIGH.put(Executor::new_with_alarm(alarm_high, || { |
| 145 | interrupt::pend(interrupt::SWI1_EGU1) | 147 | NVIC::pend(interrupt::SWI1_EGU1) |
| 146 | })); | 148 | })); |
| 147 | 149 | ||
| 148 | interrupt::set_priority(interrupt::SWI0_EGU0, interrupt::Priority::Level7); | 150 | unsafe { |
| 149 | interrupt::set_priority(interrupt::SWI1_EGU1, interrupt::Priority::Level6); | 151 | let mut nvic: NVIC = core::mem::transmute(()); |
| 150 | interrupt::enable(interrupt::SWI0_EGU0); | 152 | nvic.set_priority(interrupt::SWI0_EGU0, 7 << 5); |
| 151 | interrupt::enable(interrupt::SWI1_EGU1); | 153 | nvic.set_priority(interrupt::SWI1_EGU1, 6 << 5); |
| 154 | NVIC::unmask(interrupt::SWI0_EGU0); | ||
| 155 | NVIC::unmask(interrupt::SWI1_EGU1); | ||
| 156 | } | ||
| 152 | 157 | ||
| 153 | unwrap!(executor_low.spawn(run_low())); | 158 | unwrap!(executor_low.spawn(run_low())); |
| 154 | unwrap!(executor_med.spawn(run_med())); | 159 | unwrap!(executor_med.spawn(run_med())); |
