1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#![no_std]
#![recursion_limit = "1024"]
pub mod pins;
pub use atsamd_hal as hal;
#[cfg(feature = "rt")]
pub use cortex_m_rt::entry;
pub use crate::pins::Pins;
pub use hal::common::*;
pub use hal::pac;
pub use hal::samd51::*;
use gpio::{Floating, Input, PfC, Port};
use hal::clock::GenericClockController;
use hal::sercom::{I2CMaster5, PadPin, SPIMaster2, UART4};
use hal::time::Hertz;
pub fn spi_master<F: Into<Hertz>>(
clocks: &mut GenericClockController,
bus_speed: F,
sercom2: pac::SERCOM2,
mclk: &mut pac::MCLK,
sck: gpio::Pa13<Input<Floating>>,
mosi: gpio::Pa12<Input<Floating>>,
miso: gpio::Pa14<Input<Floating>>,
port: &mut Port,
) -> SPIMaster2<
hal::sercom::Sercom2Pad2<gpio::Pa14<gpio::PfC>>,
hal::sercom::Sercom2Pad0<gpio::Pa12<gpio::PfC>>,
hal::sercom::Sercom2Pad1<gpio::Pa13<gpio::PfC>>,
> {
let gclk0 = clocks.gclk0();
SPIMaster2::new(
&clocks.sercom2_core(&gclk0).unwrap(),
bus_speed.into(),
hal::hal::spi::Mode {
phase: hal::hal::spi::Phase::CaptureOnFirstTransition,
polarity: hal::hal::spi::Polarity::IdleLow,
},
sercom2,
mclk,
(miso.into_pad(port), mosi.into_pad(port), sck.into_pad(port)),
)
}
pub fn i2c_master<F: Into<Hertz>>(
clocks: &mut GenericClockController,
bus_speed: F,
sercom5: pac::SERCOM5,
mclk: &mut pac::MCLK,
sda: gpio::Pb2<Input<Floating>>,
scl: gpio::Pb3<Input<Floating>>,
port: &mut Port,
) -> I2CMaster5<
hal::sercom::Sercom5Pad0<gpio::Pb2<gpio::PfD>>,
hal::sercom::Sercom5Pad1<gpio::Pb3<gpio::PfD>>,
> {
let gclk0 = clocks.gclk0();
I2CMaster5::new(
&clocks.sercom5_core(&gclk0).unwrap(),
bus_speed.into(),
sercom5,
mclk,
sda.into_pad(port),
scl.into_pad(port),
)
}
pub fn esp_uart<F: Into<Hertz>>(
clocks: &mut GenericClockController,
baud: F,
sercom4: pac::SERCOM4,
mclk: &mut pac::MCLK,
esp_rx: gpio::Pb13<Input<Floating>>,
esp_tx: gpio::Pb12<Input<Floating>>,
port: &mut Port,
) -> UART4<
hal::sercom::Sercom4Pad1<gpio::Pb13<PfC>>,
hal::sercom::Sercom4Pad0<gpio::Pb12<PfC>>,
(),
(),
> {
let gclk0 = clocks.gclk0();
UART4::new(
&clocks.sercom4_core(&gclk0).unwrap(),
baud.into(),
sercom4,
mclk,
(esp_rx.into_pad(port), esp_tx.into_pad(port)),
)
}