Skip to content

Commit 8cc7004

Browse files
Increase GPIO interrupt example clarity
1 parent d397a9c commit 8cc7004

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

hifive1-examples/examples/button_interrupt.rs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,28 +70,36 @@ fn main() -> ! {
7070
let mut led = pin!(pins, led_blue).into_inverted_output();
7171

7272
sprintln!("Configuring external interrupts...");
73-
// Set button interrupt source priority
73+
74+
// Make sure interrupts are disabled
75+
riscv::interrupt::disable();
76+
77+
// Reset PLIC interrupts and set priority threshold
7478
let plic = cp.plic;
7579
let priorities = plic.priorities();
80+
let ctx = plic.ctx0();
7681
priorities.reset::<ExternalInterrupt>();
77-
unsafe { priorities.set_priority(ExternalInterrupt::GPIO9, Priority::P1) };
82+
unsafe {
83+
ctx.enables().disable_all::<ExternalInterrupt>();
84+
ctx.threshold().set_threshold(Priority::P0);
85+
}
7886

7987
// Enable GPIO9 interrupt for both edges
80-
unsafe { button.set_exti_priority(&plic, Priority::P1) };
8188
button.enable_interrupt(EventType::BothEdges);
89+
unsafe {
90+
button.set_exti_priority(&plic, Priority::P1);
91+
button.enable_exti(&plic);
92+
}
8293

8394
// Store button pin in a shared resource
8495
critical_section::with(|cs| {
8596
BUTTON.borrow(cs).replace(Some(button));
8697
});
8798

8899
sprintln!("Enabling external interrupts...");
89-
// Enable GPIO9 interrupt in PLIC
90-
let ctx = plic.ctx0();
100+
101+
// Enable global interrupts
91102
unsafe {
92-
ctx.enables().disable_all::<ExternalInterrupt>();
93-
ctx.threshold().set_threshold(Priority::P0);
94-
ctx.enables().enable(ExternalInterrupt::GPIO9);
95103
riscv::interrupt::enable();
96104
plic.enable();
97105
}

0 commit comments

Comments
 (0)