aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar bors[bot] <26634292+bors[bot]@users.noreply.github.com> 2020-09-21 23:55:43 +0000
committerGravatar GitHub <noreply@github.com> 2020-09-21 23:55:43 +0000
commit43b9383cbedc5b0fb0b2df51df0e7af742fb7b61 (patch)
tree1bdb110a4d9d2192c8b546c23d7e10dadb27b4b5
parentaa77c89a5ff0f81f5bbd52799fe8caf12fb493d6 (diff)
parentb7541ddb57b268ebec9591730898c97bd98d36d6 (diff)
downloadcortex-m-43b9383cbedc5b0fb0b2df51df0e7af742fb7b61.tar.gz
cortex-m-43b9383cbedc5b0fb0b2df51df0e7af742fb7b61.tar.zst
cortex-m-43b9383cbedc5b0fb0b2df51df0e7af742fb7b61.zip
Merge #266
266: Implement InterruptNumber for bare_metal::Nr r=therealprof a=adamgreig This PR aims to help backwards compatibility by implementing the new `InterruptNumber` trait (coming in cortex-m 0.7) for the old `bare_metal::Nr` trait. With this included in cortex-m 0.7, existing PACs generated from the current svd2rust (0.17) will work with cortex-m 0.7, and new PACs generated from a to-be-released svd2rust which uses `InterruptNumber directly will also work. We can then remove this implementation in cortex-m 0.8 and upgrade cortex-m to depend on bare-metal 1.0 (or not depend on it at all) at that time. With this PR in place, the upgrade path looks like: * We release cortex-m 0.7, which users can upgrade to without needing a new PAC * We release svd2rust 0.18, which will generate new PACs * PACs update, now requiring cortex-m 0.7 * Users can update their PAC so long as they've already upgraded to cortex-m 0.7 * For cortex-m 0.8, we drop this impl and move off bare-metal 0.2, and a new PAC is required to use 0.8 onwards Co-authored-by: Adam Greig <adam@adamgreig.com>
-rw-r--r--CHANGELOG.md2
-rw-r--r--src/interrupt.rs11
2 files changed, 12 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d7cae7a..198cecc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
- New `InterruptNumber` trait is now required on interrupt arguments to the
various NVIC functions, replacing the previous use of `Nr` from bare-metal.
+ For backwards compatibility, `InterruptNumber` is implemented for types
+ which are `Nr + Copy`, but this will be removed in a future version.
- Associated const `PTR` is introduced to Core Peripherals to
eventually replace the existing `ptr()` API.
- A delay driver based on SysTick.
diff --git a/src/interrupt.rs b/src/interrupt.rs
index 68719ec..ad76ff2 100644
--- a/src/interrupt.rs
+++ b/src/interrupt.rs
@@ -1,6 +1,6 @@
//! Interrupts
-pub use bare_metal::{CriticalSection, Mutex};
+pub use bare_metal::{CriticalSection, Mutex, Nr};
/// Trait for enums of external interrupt numbers.
///
@@ -23,6 +23,15 @@ pub unsafe trait InterruptNumber: Copy {
fn number(self) -> u16;
}
+/// Implement InterruptNumber for the old bare_metal::Nr trait.
+/// This implementation is for backwards compatibility only and will be removed in cortex-m 0.8.
+#[deprecated(since="0.7.0", note="Please update your PAC to one using the latest svd2rust")]
+unsafe impl<T: Nr + Copy> InterruptNumber for T {
+ fn number(self) -> u16 {
+ self.nr() as u16
+ }
+}
+
/// Disables all interrupts
#[inline]
pub fn disable() {