aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xci.sh2
-rw-r--r--embassy-stm32/src/rcc/g0/mod.rs25
-rw-r--r--embassy-stm32/src/rcc/g4/mod.rs25
-rw-r--r--embassy-stm32/src/rcc/l0/mod.rs82
-rw-r--r--embassy-stm32/src/rcc/l1/mod.rs53
-rw-r--r--embassy-stm32/src/rcc/mod.rs1
-rw-r--r--embassy-stm32/src/rcc/types.rs94
-rw-r--r--embassy-stm32/src/rcc/wb/mod.rs35
-rw-r--r--embassy-stm32/src/rcc/wl5x/mod.rs35
9 files changed, 250 insertions, 102 deletions
diff --git a/ci.sh b/ci.sh
index 94370abd8..b9a803bf3 100755
--- a/ci.sh
+++ b/ci.sh
@@ -5,7 +5,7 @@ set -euo pipefail
5export CARGO_TARGET_DIR=$PWD/target_ci 5export CARGO_TARGET_DIR=$PWD/target_ci
6export RUSTFLAGS=-Dwarnings 6export RUSTFLAGS=-Dwarnings
7 7
8find -name '*.rs' -not -path '*target*' -not -path '*stm32-metapac-gen/out/*' | xargs rustfmt --check --skip-children --unstable-features --edition 2018 8find . -name '*.rs' -not -path '*target*' -not -path '*stm32-metapac-gen/out/*' | xargs rustfmt --check --skip-children --unstable-features --edition 2018
9 9
10# Generate stm32-metapac 10# Generate stm32-metapac
11# for some reason Cargo stomps the cache if we don't specify --target. 11# for some reason Cargo stomps the cache if we don't specify --target.
diff --git a/embassy-stm32/src/rcc/g0/mod.rs b/embassy-stm32/src/rcc/g0/mod.rs
index c0b5b14e3..103d9a840 100644
--- a/embassy-stm32/src/rcc/g0/mod.rs
+++ b/embassy-stm32/src/rcc/g0/mod.rs
@@ -1,4 +1,3 @@
1pub use super::types::*;
2use crate::pac; 1use crate::pac;
3use crate::peripherals::{self, RCC}; 2use crate::peripherals::{self, RCC};
4use crate::rcc::{get_freqs, set_freqs, Clocks}; 3use crate::rcc::{get_freqs, set_freqs, Clocks};
@@ -49,6 +48,30 @@ impl Into<u8> for HSI16Prescaler {
49 } 48 }
50} 49}
51 50
51/// AHB prescaler
52#[derive(Clone, Copy, PartialEq)]
53pub enum AHBPrescaler {
54 NotDivided,
55 Div2,
56 Div4,
57 Div8,
58 Div16,
59 Div64,
60 Div128,
61 Div256,
62 Div512,
63}
64
65/// APB prescaler
66#[derive(Clone, Copy)]
67pub enum APBPrescaler {
68 NotDivided,
69 Div2,
70 Div4,
71 Div8,
72 Div16,
73}
74
52impl Into<u8> for APBPrescaler { 75impl Into<u8> for APBPrescaler {
53 fn into(self) -> u8 { 76 fn into(self) -> u8 {
54 match self { 77 match self {
diff --git a/embassy-stm32/src/rcc/g4/mod.rs b/embassy-stm32/src/rcc/g4/mod.rs
index b0338e725..8dd37af8e 100644
--- a/embassy-stm32/src/rcc/g4/mod.rs
+++ b/embassy-stm32/src/rcc/g4/mod.rs
@@ -1,4 +1,3 @@
1pub use super::types::*;
2use crate::pac; 1use crate::pac;
3use crate::peripherals::{self, RCC}; 2use crate::peripherals::{self, RCC};
4use crate::rcc::{get_freqs, set_freqs, Clocks}; 3use crate::rcc::{get_freqs, set_freqs, Clocks};
@@ -21,6 +20,30 @@ pub enum ClockSrc {
21 HSI16, 20 HSI16,
22} 21}
23 22
23/// AHB prescaler
24#[derive(Clone, Copy, PartialEq)]
25pub enum AHBPrescaler {
26 NotDivided,
27 Div2,
28 Div4,
29 Div8,
30 Div16,
31 Div64,
32 Div128,
33 Div256,
34 Div512,
35}
36
37/// APB prescaler
38#[derive(Clone, Copy)]
39pub enum APBPrescaler {
40 NotDivided,
41 Div2,
42 Div4,
43 Div8,
44 Div16,
45}
46
24impl Into<u8> for APBPrescaler { 47impl Into<u8> for APBPrescaler {
25 fn into(self) -> u8 { 48 fn into(self) -> u8 {
26 match self { 49 match self {
diff --git a/embassy-stm32/src/rcc/l0/mod.rs b/embassy-stm32/src/rcc/l0/mod.rs
index e65faaa2c..8af4eca08 100644
--- a/embassy-stm32/src/rcc/l0/mod.rs
+++ b/embassy-stm32/src/rcc/l0/mod.rs
@@ -1,4 +1,3 @@
1pub use super::types::*;
2use crate::pac; 1use crate::pac;
3use crate::peripherals::{self, CRS, RCC, SYSCFG}; 2use crate::peripherals::{self, CRS, RCC, SYSCFG};
4use crate::rcc::{get_freqs, set_freqs, Clocks}; 3use crate::rcc::{get_freqs, set_freqs, Clocks};
@@ -24,6 +23,87 @@ pub enum ClockSrc {
24 HSI16, 23 HSI16,
25} 24}
26 25
26/// MSI Clock Range
27///
28/// These ranges control the frequency of the MSI. Internally, these ranges map
29/// to the `MSIRANGE` bits in the `RCC_ICSCR` register.
30#[derive(Clone, Copy)]
31pub enum MSIRange {
32 /// Around 65.536 kHz
33 Range0,
34 /// Around 131.072 kHz
35 Range1,
36 /// Around 262.144 kHz
37 Range2,
38 /// Around 524.288 kHz
39 Range3,
40 /// Around 1.048 MHz
41 Range4,
42 /// Around 2.097 MHz (reset value)
43 Range5,
44 /// Around 4.194 MHz
45 Range6,
46}
47
48impl Default for MSIRange {
49 fn default() -> MSIRange {
50 MSIRange::Range5
51 }
52}
53
54/// PLL divider
55#[derive(Clone, Copy)]
56pub enum PLLDiv {
57 Div2,
58 Div3,
59 Div4,
60}
61
62/// PLL multiplier
63#[derive(Clone, Copy)]
64pub enum PLLMul {
65 Mul3,
66 Mul4,
67 Mul6,
68 Mul8,
69 Mul12,
70 Mul16,
71 Mul24,
72 Mul32,
73 Mul48,
74}
75
76/// AHB prescaler
77#[derive(Clone, Copy, PartialEq)]
78pub enum AHBPrescaler {
79 NotDivided,
80 Div2,
81 Div4,
82 Div8,
83 Div16,
84 Div64,
85 Div128,
86 Div256,
87 Div512,
88}
89
90/// APB prescaler
91#[derive(Clone, Copy)]
92pub enum APBPrescaler {
93 NotDivided,
94 Div2,
95 Div4,
96 Div8,
97 Div16,
98}
99
100/// PLL clock input source
101#[derive(Clone, Copy)]
102pub enum PLLSource {
103 HSI16,
104 HSE(Hertz),
105}
106
27impl Into<Pllmul> for PLLMul { 107impl Into<Pllmul> for PLLMul {
28 fn into(self) -> Pllmul { 108 fn into(self) -> Pllmul {
29 match self { 109 match self {
diff --git a/embassy-stm32/src/rcc/l1/mod.rs b/embassy-stm32/src/rcc/l1/mod.rs
index f6edd4e4f..d0b52d2f4 100644
--- a/embassy-stm32/src/rcc/l1/mod.rs
+++ b/embassy-stm32/src/rcc/l1/mod.rs
@@ -1,4 +1,3 @@
1pub use super::types::*;
2use crate::pac; 1use crate::pac;
3use crate::peripherals::{self, RCC}; 2use crate::peripherals::{self, RCC};
4use crate::rcc::{get_freqs, set_freqs, Clocks}; 3use crate::rcc::{get_freqs, set_freqs, Clocks};
@@ -21,6 +20,58 @@ pub enum ClockSrc {
21 HSI, 20 HSI,
22} 21}
23 22
23/// MSI Clock Range
24///
25/// These ranges control the frequency of the MSI. Internally, these ranges map
26/// to the `MSIRANGE` bits in the `RCC_ICSCR` register.
27#[derive(Clone, Copy)]
28pub enum MSIRange {
29 /// Around 65.536 kHz
30 Range0,
31 /// Around 131.072 kHz
32 Range1,
33 /// Around 262.144 kHz
34 Range2,
35 /// Around 524.288 kHz
36 Range3,
37 /// Around 1.048 MHz
38 Range4,
39 /// Around 2.097 MHz (reset value)
40 Range5,
41 /// Around 4.194 MHz
42 Range6,
43}
44
45impl Default for MSIRange {
46 fn default() -> MSIRange {
47 MSIRange::Range5
48 }
49}
50
51/// AHB prescaler
52#[derive(Clone, Copy, PartialEq)]
53pub enum AHBPrescaler {
54 NotDivided,
55 Div2,
56 Div4,
57 Div8,
58 Div16,
59 Div64,
60 Div128,
61 Div256,
62 Div512,
63}
64
65/// APB prescaler
66#[derive(Clone, Copy)]
67pub enum APBPrescaler {
68 NotDivided,
69 Div2,
70 Div4,
71 Div8,
72 Div16,
73}
74
24type Ppre = u8; 75type Ppre = u8;
25impl Into<Ppre> for APBPrescaler { 76impl Into<Ppre> for APBPrescaler {
26 fn into(self) -> Ppre { 77 fn into(self) -> Ppre {
diff --git a/embassy-stm32/src/rcc/mod.rs b/embassy-stm32/src/rcc/mod.rs
index cdcbd2afc..b926eb8ce 100644
--- a/embassy-stm32/src/rcc/mod.rs
+++ b/embassy-stm32/src/rcc/mod.rs
@@ -3,7 +3,6 @@
3use crate::peripherals; 3use crate::peripherals;
4use crate::time::Hertz; 4use crate::time::Hertz;
5use core::mem::MaybeUninit; 5use core::mem::MaybeUninit;
6mod types;
7 6
8#[derive(Clone, Copy)] 7#[derive(Clone, Copy)]
9pub struct Clocks { 8pub struct Clocks {
diff --git a/embassy-stm32/src/rcc/types.rs b/embassy-stm32/src/rcc/types.rs
deleted file mode 100644
index 1fcaa27e9..000000000
--- a/embassy-stm32/src/rcc/types.rs
+++ /dev/null
@@ -1,94 +0,0 @@
1#![allow(dead_code)]
2/// Most of clock setup is copied from stm32l0xx-hal, and adopted to the generated PAC,
3/// and with the addition of the init function to configure a system clock.
4use crate::time::Hertz;
5
6/// System clock mux source
7#[derive(Clone, Copy)]
8pub enum ClockSrc {
9 MSI(MSIRange),
10 PLL(PLLSource, PLLMul, PLLDiv),
11 HSE(Hertz),
12 HSI16,
13}
14
15/// MSI Clock Range
16///
17/// These ranges control the frequency of the MSI. Internally, these ranges map
18/// to the `MSIRANGE` bits in the `RCC_ICSCR` register.
19#[derive(Clone, Copy)]
20pub enum MSIRange {
21 /// Around 65.536 kHz
22 Range0,
23 /// Around 131.072 kHz
24 Range1,
25 /// Around 262.144 kHz
26 Range2,
27 /// Around 524.288 kHz
28 Range3,
29 /// Around 1.048 MHz
30 Range4,
31 /// Around 2.097 MHz (reset value)
32 Range5,
33 /// Around 4.194 MHz
34 Range6,
35}
36
37impl Default for MSIRange {
38 fn default() -> MSIRange {
39 MSIRange::Range5
40 }
41}
42
43/// PLL divider
44#[derive(Clone, Copy)]
45pub enum PLLDiv {
46 Div2,
47 Div3,
48 Div4,
49}
50
51/// PLL multiplier
52#[derive(Clone, Copy)]
53pub enum PLLMul {
54 Mul3,
55 Mul4,
56 Mul6,
57 Mul8,
58 Mul12,
59 Mul16,
60 Mul24,
61 Mul32,
62 Mul48,
63}
64
65/// AHB prescaler
66#[derive(Clone, Copy, PartialEq)]
67pub enum AHBPrescaler {
68 NotDivided,
69 Div2,
70 Div4,
71 Div8,
72 Div16,
73 Div64,
74 Div128,
75 Div256,
76 Div512,
77}
78
79/// APB prescaler
80#[derive(Clone, Copy)]
81pub enum APBPrescaler {
82 NotDivided,
83 Div2,
84 Div4,
85 Div8,
86 Div16,
87}
88
89/// PLL clock input source
90#[derive(Clone, Copy)]
91pub enum PLLSource {
92 HSI16,
93 HSE(Hertz),
94}
diff --git a/embassy-stm32/src/rcc/wb/mod.rs b/embassy-stm32/src/rcc/wb/mod.rs
index 4247d8ffb..435357418 100644
--- a/embassy-stm32/src/rcc/wb/mod.rs
+++ b/embassy-stm32/src/rcc/wb/mod.rs
@@ -1,4 +1,3 @@
1pub use super::types::*;
2use crate::pac; 1use crate::pac;
3use crate::peripherals::{self, RCC}; 2use crate::peripherals::{self, RCC};
4use crate::rcc::{get_freqs, set_freqs, Clocks}; 3use crate::rcc::{get_freqs, set_freqs, Clocks};
@@ -23,6 +22,35 @@ pub enum ClockSrc {
23 HSI16, 22 HSI16,
24} 23}
25 24
25/// AHB prescaler
26#[derive(Clone, Copy, PartialEq)]
27pub enum AHBPrescaler {
28 NotDivided,
29 Div2,
30 Div3,
31 Div4,
32 Div5,
33 Div6,
34 Div8,
35 Div10,
36 Div16,
37 Div32,
38 Div64,
39 Div128,
40 Div256,
41 Div512,
42}
43
44/// APB prescaler
45#[derive(Clone, Copy)]
46pub enum APBPrescaler {
47 NotDivided,
48 Div2,
49 Div4,
50 Div8,
51 Div16,
52}
53
26impl Into<u8> for APBPrescaler { 54impl Into<u8> for APBPrescaler {
27 fn into(self) -> u8 { 55 fn into(self) -> u8 {
28 match self { 56 match self {
@@ -40,9 +68,14 @@ impl Into<u8> for AHBPrescaler {
40 match self { 68 match self {
41 AHBPrescaler::NotDivided => 1, 69 AHBPrescaler::NotDivided => 1,
42 AHBPrescaler::Div2 => 0x08, 70 AHBPrescaler::Div2 => 0x08,
71 AHBPrescaler::Div3 => 0x01,
43 AHBPrescaler::Div4 => 0x09, 72 AHBPrescaler::Div4 => 0x09,
73 AHBPrescaler::Div5 => 0x02,
74 AHBPrescaler::Div6 => 0x05,
44 AHBPrescaler::Div8 => 0x0a, 75 AHBPrescaler::Div8 => 0x0a,
76 AHBPrescaler::Div10 => 0x06,
45 AHBPrescaler::Div16 => 0x0b, 77 AHBPrescaler::Div16 => 0x0b,
78 AHBPrescaler::Div32 => 0x07,
46 AHBPrescaler::Div64 => 0x0c, 79 AHBPrescaler::Div64 => 0x0c,
47 AHBPrescaler::Div128 => 0x0d, 80 AHBPrescaler::Div128 => 0x0d,
48 AHBPrescaler::Div256 => 0x0e, 81 AHBPrescaler::Div256 => 0x0e,
diff --git a/embassy-stm32/src/rcc/wl5x/mod.rs b/embassy-stm32/src/rcc/wl5x/mod.rs
index 86fb3f586..aa49c99c9 100644
--- a/embassy-stm32/src/rcc/wl5x/mod.rs
+++ b/embassy-stm32/src/rcc/wl5x/mod.rs
@@ -1,4 +1,3 @@
1pub use super::types::*;
2use crate::pac; 1use crate::pac;
3use crate::peripherals::{self, RCC}; 2use crate::peripherals::{self, RCC};
4use crate::rcc::{get_freqs, set_freqs, Clocks}; 3use crate::rcc::{get_freqs, set_freqs, Clocks};
@@ -24,6 +23,35 @@ pub enum ClockSrc {
24 HSI16, 23 HSI16,
25} 24}
26 25
26/// AHB prescaler
27#[derive(Clone, Copy, PartialEq)]
28pub enum AHBPrescaler {
29 NotDivided,
30 Div2,
31 Div3,
32 Div4,
33 Div5,
34 Div6,
35 Div8,
36 Div10,
37 Div16,
38 Div32,
39 Div64,
40 Div128,
41 Div256,
42 Div512,
43}
44
45/// APB prescaler
46#[derive(Clone, Copy)]
47pub enum APBPrescaler {
48 NotDivided,
49 Div2,
50 Div4,
51 Div8,
52 Div16,
53}
54
27impl Into<u8> for APBPrescaler { 55impl Into<u8> for APBPrescaler {
28 fn into(self) -> u8 { 56 fn into(self) -> u8 {
29 match self { 57 match self {
@@ -41,9 +69,14 @@ impl Into<u8> for AHBPrescaler {
41 match self { 69 match self {
42 AHBPrescaler::NotDivided => 1, 70 AHBPrescaler::NotDivided => 1,
43 AHBPrescaler::Div2 => 0x08, 71 AHBPrescaler::Div2 => 0x08,
72 AHBPrescaler::Div3 => 0x01,
44 AHBPrescaler::Div4 => 0x09, 73 AHBPrescaler::Div4 => 0x09,
74 AHBPrescaler::Div5 => 0x02,
75 AHBPrescaler::Div6 => 0x05,
45 AHBPrescaler::Div8 => 0x0a, 76 AHBPrescaler::Div8 => 0x0a,
77 AHBPrescaler::Div10 => 0x06,
46 AHBPrescaler::Div16 => 0x0b, 78 AHBPrescaler::Div16 => 0x0b,
79 AHBPrescaler::Div32 => 0x07,
47 AHBPrescaler::Div64 => 0x0c, 80 AHBPrescaler::Div64 => 0x0c,
48 AHBPrescaler::Div128 => 0x0d, 81 AHBPrescaler::Div128 => 0x0d,
49 AHBPrescaler::Div256 => 0x0e, 82 AHBPrescaler::Div256 => 0x0e,