aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2024-01-15 12:01:22 +0100
committerGitHub <[email protected]>2024-01-15 12:01:22 +0100
commit9cd0beaee37f9e1cc885ad162b63bca795478227 (patch)
tree53e3353abe658e004b277ad01fadcabde6dceb78
parent04eb56a884ab4f2bfaf7effb9392706bb8260178 (diff)
parente969b88e5ae1aa439b47f7b55e740d6ca78b9a0a (diff)
Merge pull request #2450 from shufps/feat/timer-driver-tim22-tim23
adds timer-driver for tim21 and tim22 (on L0)
-rw-r--r--embassy-stm32/Cargo.toml4
-rw-r--r--embassy-stm32/build.rs6
-rw-r--r--embassy-stm32/src/time_driver.rs24
3 files changed, 32 insertions, 2 deletions
diff --git a/embassy-stm32/Cargo.toml b/embassy-stm32/Cargo.toml
index f1539229f..865970dfb 100644
--- a/embassy-stm32/Cargo.toml
+++ b/embassy-stm32/Cargo.toml
@@ -139,6 +139,10 @@ time-driver-tim11 = ["_time-driver"]
139time-driver-tim12 = ["_time-driver"] 139time-driver-tim12 = ["_time-driver"]
140## Use TIM15 as time driver 140## Use TIM15 as time driver
141time-driver-tim15 = ["_time-driver"] 141time-driver-tim15 = ["_time-driver"]
142## Use TIM21 as time driver
143time-driver-tim21 = ["_time-driver"]
144## Use TIM22 as time driver
145time-driver-tim22 = ["_time-driver"]
142 146
143 147
144#! ## Analog Switch Pins (Pxy_C) on STM32H7 series 148#! ## Analog Switch Pins (Pxy_C) on STM32H7 series
diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs
index ef152acd1..948ce3aff 100644
--- a/embassy-stm32/build.rs
+++ b/embassy-stm32/build.rs
@@ -191,6 +191,8 @@ fn main() {
191 Some("tim11") => "TIM11", 191 Some("tim11") => "TIM11",
192 Some("tim12") => "TIM12", 192 Some("tim12") => "TIM12",
193 Some("tim15") => "TIM15", 193 Some("tim15") => "TIM15",
194 Some("tim21") => "TIM21",
195 Some("tim22") => "TIM22",
194 Some("any") => { 196 Some("any") => {
195 if singletons.contains(&"TIM2".to_string()) { 197 if singletons.contains(&"TIM2".to_string()) {
196 "TIM2" 198 "TIM2"
@@ -208,6 +210,10 @@ fn main() {
208 "TIM12" 210 "TIM12"
209 } else if singletons.contains(&"TIM15".to_string()) { 211 } else if singletons.contains(&"TIM15".to_string()) {
210 "TIM15" 212 "TIM15"
213 } else if singletons.contains(&"TIM21".to_string()) {
214 "TIM21"
215 } else if singletons.contains(&"TIM22".to_string()) {
216 "TIM22"
211 } else { 217 } else {
212 panic!("time-driver-any requested, but the chip doesn't have TIM2, TIM3, TIM4, TIM5, TIM9, TIM11, TIM12 or TIM15.") 218 panic!("time-driver-any requested, but the chip doesn't have TIM2, TIM3, TIM4, TIM5, TIM9, TIM11, TIM12 or TIM15.")
213 } 219 }
diff --git a/embassy-stm32/src/time_driver.rs b/embassy-stm32/src/time_driver.rs
index 0dbadce0c..320b29ddb 100644
--- a/embassy-stm32/src/time_driver.rs
+++ b/embassy-stm32/src/time_driver.rs
@@ -28,10 +28,10 @@ use crate::{interrupt, peripherals};
28// available after reserving CC1 for regular time keeping. For example, TIM2 has four CC registers: 28// available after reserving CC1 for regular time keeping. For example, TIM2 has four CC registers:
29// CC1, CC2, CC3, and CC4, so it can provide ALARM_COUNT = 3. 29// CC1, CC2, CC3, and CC4, so it can provide ALARM_COUNT = 3.
30 30
31#[cfg(not(any(time_driver_tim12, time_driver_tim15)))] 31#[cfg(not(any(time_driver_tim12, time_driver_tim15, time_driver_tim21, time_driver_tim22)))]
32const ALARM_COUNT: usize = 3; 32const ALARM_COUNT: usize = 3;
33 33
34#[cfg(any(time_driver_tim12, time_driver_tim15))] 34#[cfg(any(time_driver_tim12, time_driver_tim15, time_driver_tim21, time_driver_tim22))]
35const ALARM_COUNT: usize = 1; 35const ALARM_COUNT: usize = 1;
36 36
37#[cfg(time_driver_tim2)] 37#[cfg(time_driver_tim2)]
@@ -50,6 +50,10 @@ type T = peripherals::TIM11;
50type T = peripherals::TIM12; 50type T = peripherals::TIM12;
51#[cfg(time_driver_tim15)] 51#[cfg(time_driver_tim15)]
52type T = peripherals::TIM15; 52type T = peripherals::TIM15;
53#[cfg(time_driver_tim21)]
54type T = peripherals::TIM21;
55#[cfg(time_driver_tim22)]
56type T = peripherals::TIM22;
53 57
54foreach_interrupt! { 58foreach_interrupt! {
55 (TIM2, timer, $block:ident, UP, $irq:ident) => { 59 (TIM2, timer, $block:ident, UP, $irq:ident) => {
@@ -116,6 +120,22 @@ foreach_interrupt! {
116 DRIVER.on_interrupt() 120 DRIVER.on_interrupt()
117 } 121 }
118 }; 122 };
123 (TIM21, timer, $block:ident, UP, $irq:ident) => {
124 #[cfg(time_driver_tim21)]
125 #[cfg(feature = "rt")]
126 #[interrupt]
127 fn $irq() {
128 DRIVER.on_interrupt()
129 }
130 };
131 (TIM22, timer, $block:ident, UP, $irq:ident) => {
132 #[cfg(time_driver_tim22)]
133 #[cfg(feature = "rt")]
134 #[interrupt]
135 fn $irq() {
136 DRIVER.on_interrupt()
137 }
138 };
119} 139}
120 140
121// Clock timekeeping works with something we call "periods", which are time intervals 141// Clock timekeeping works with something we call "periods", which are time intervals