Browse Source

Remove timer references to interrupt handlers

Kevin Lee 2 years ago
parent
commit
db03afa956
2 changed files with 35 additions and 44 deletions
  1. 35 23
      Nixie_Firmware_Rust/src/main.rs
  2. 0 21
      Nixie_Firmware_Rust/src/nixie.rs

+ 35 - 23
Nixie_Firmware_Rust/src/main.rs

@@ -264,23 +264,29 @@ fn EXTI9_5() {
     free(|cs| {
         let mut rtc_int_ref = RTC_INT.borrow(cs).borrow_mut();
         let mut i2c_int_ref = I2C.borrow(cs).borrow_mut();
+        let mut fps_timer_ref = FPS_TIMER.borrow(cs).borrow_mut();
         let mut clock_ref = CLOCK.borrow(cs).borrow_mut();
         if let Some(ref mut rtc_int) = rtc_int_ref.deref_mut() {
             if let Some(ref mut i2c) = i2c_int_ref.deref_mut() {
-                if rtc_int.check_interrupt() {
-                    // Read new time from DS3231
-                    let (second, minute, hour) = ds3231::get_time(DS3231_ADDR, i2c);
-                    let (weekday, day, month, _, _) = ds3231::get_date(DS3231_ADDR, i2c);
-
-                    // Calculate new values and account for DST
-                    let hour = if ds3231::in_dst(weekday, day, month, hour) { (hour + 1) % 12 } else { hour % 12 };
-                    let hour = if hour == 0 { 12 } else { hour };
-
-                    // Trigger the processing of a new time value
-                    clock_ref.deref_mut().rtc_tick(second, minute, hour);
-                    
-                    // Clear the interrupt flag for the timer
-                    rtc_int.clear_interrupt_pending_bit();
+                if let Some(ref mut fps_timer) = fps_timer_ref.deref_mut() {
+                    if rtc_int.check_interrupt() {
+                        // Read new time from DS3231
+                        let (second, minute, hour) = ds3231::get_time(DS3231_ADDR, i2c);
+                        let (weekday, day, month, _, _) = ds3231::get_date(DS3231_ADDR, i2c);
+
+                        // Calculate new values and account for DST
+                        let hour = if ds3231::in_dst(weekday, day, month, hour) { (hour + 1) % 12 } else { hour % 12 };
+                        let hour = if hour == 0 { 12 } else { hour };
+
+                        // Trigger the processing of a new time value
+                        clock_ref.deref_mut().rtc_tick(second, minute, hour);
+
+                        // Start the refresh timer to update the display
+                        fps_timer.listen(Event::TimeOut);
+                        
+                        // Clear the interrupt flag for the timer
+                        rtc_int.clear_interrupt_pending_bit();
+                    }
                 }
             }
         }
@@ -306,19 +312,19 @@ fn EXTI3() {
 fn TIM2() {
     free(|cs| {
         let mut i2c_int_ref = I2C.borrow(cs).borrow_mut();
-        let mut timer_ref = FPS_TIMER.borrow(cs).borrow_mut();
+        let mut fps_timer_ref = FPS_TIMER.borrow(cs).borrow_mut();
         let mut clock_ref = CLOCK.borrow(cs).borrow_mut();
         if let Some(ref mut i2c) = i2c_int_ref.deref_mut() {
-            if let Some(ref mut timer) = timer_ref.deref_mut() {
+            if let Some(ref mut fps_timer) = fps_timer_ref.deref_mut() {
                 // Compute updates for non-static digits
                 let updated = clock_ref.deref_mut().fps_tick();
 
                 // Write new values if values have changed, otherwise disable the refresh timer
                 if updated {
                     clock_ref.deref_mut().write_i2c(i2c);
-                    timer.clear_interrupt(Event::TimeOut);
+                    fps_timer.clear_interrupt(Event::TimeOut);
                 } else {
-                    timer.unlisten(Event::TimeOut);
+                    fps_timer.unlisten(Event::TimeOut);
                 }
             }
         }
@@ -330,13 +336,19 @@ fn TIM2() {
 fn TIM7() {
     free(|cs| {
         let mut cycle_timer_ref = CYCLE_TIMER.borrow(cs).borrow_mut();
+        let mut fps_timer_ref = FPS_TIMER.borrow(cs).borrow_mut();
         let mut clock_ref = CLOCK.borrow(cs).borrow_mut();
         if let Some(ref mut cycle_timer) = cycle_timer_ref.deref_mut() {
-            // Trigger the next step in the cycling sequence
-            if clock_ref.deref_mut().cycle_tick() {
-                cycle_timer.unlisten(Event::TimeOut);
-            } else {
-                cycle_timer.clear_interrupt(Event::TimeOut);
+            if let Some(ref mut fps_timer) = fps_timer_ref.deref_mut() {
+                // Trigger the next step in the cycling sequence
+                if clock_ref.deref_mut().cycle_tick() {
+                    cycle_timer.unlisten(Event::TimeOut);
+                } else {
+                    cycle_timer.clear_interrupt(Event::TimeOut);
+                }
+
+                // Start the refresh timer to update the display
+                fps_timer.listen(Event::TimeOut);
             }
         }
     });

+ 0 - 21
Nixie_Firmware_Rust/src/nixie.rs

@@ -1,12 +1,8 @@
-use core::ops::DerefMut;
-
-use cortex_m::interrupt::free;
 use stm32l4xx_hal::{
     prelude::{
         _embedded_hal_blocking_i2c_Read, _embedded_hal_blocking_i2c_Write,
         _embedded_hal_blocking_i2c_WriteRead,
     },
-    timer::Event,
 };
 
 use crate::pca9685;
@@ -285,15 +281,6 @@ impl Clock {
         // Store the last set value for the next update
         self.hour = Some(hour);
         self.minute = Some(minute);
-
-        // Start the display refresh timer to update the display
-        #[cfg(not(test))]
-        free(|cs| {
-            let mut timer_ref = super::FPS_TIMER.borrow(cs).borrow_mut();
-            if let Some(ref mut timer) = timer_ref.deref_mut() {
-                timer.listen(Event::TimeOut);
-            }
-        });
     }
 
     // Updates the display with values due to fade in/out
@@ -403,14 +390,6 @@ impl Clock {
             }
         });
 
-        #[cfg(not(test))]
-        free(|cs| {
-            let mut timer_ref = super::FPS_TIMER.borrow(cs).borrow_mut();
-            if let Some(ref mut timer) = timer_ref.deref_mut() {
-                timer.listen(Event::TimeOut);
-            }
-        });
-
         cycle_ended
     }