@@ -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