attiny_hal/spi.rs
1//! SPI
2//!
3//! # Example
4//!
5//! For full source code, please refer to the ATmega SPI example:
6//! [`atmega2560-spi-feedback.rs`](https://github.com/Rahix/avr-hal/blob/main/examples/atmega2560/src/bin/atmega2560-spi-feedback.rs)
7//!
8//! ```
9//! let dp = attiny_hal::Peripherals::take().unwrap();
10//! let pins = attiny_hal::pins!(dp);
11//!
12//! let (mut spi, mut cs) = spi::Spi::new(
13//! dp.SPI,
14//! pins.pa4.into_output(),
15//! pins.pa6.into_output(),
16//! pins.pa5.into_pull_up_input(),
17//! pins.pa3.into_output(),
18//! spi::Settings::default(),
19//! );
20//!
21//! let data_out = b"Hello World!";
22//! let mut data_in = [0u8; 12];
23//!
24//! cs.set_low().unwrap();
25//! spi.transfer(&mut data_in, data_out).unwrap();
26//! cs.set_high().unwrap();
27//!
28//! ufmt::uwriteln!(&mut serial, "data: {:?}", data_in).unwrap();
29//! ```
30
31
32#[allow(unused_imports)]
33use crate::port;
34pub use avr_hal_generic::spi::*;
35
36#[cfg(feature = "attiny88")]
37pub type Spi = avr_hal_generic::spi::Spi<
38 crate::Attiny,
39 crate::pac::SPI,
40 port::PB5,
41 port::PB3,
42 port::PB4,
43 port::PB2,
44>;
45#[cfg(feature = "attiny88")]
46avr_hal_generic::impl_spi! {
47 hal: crate::Attiny,
48 peripheral: crate::pac::SPI,
49 sclk: port::PB5,
50 mosi: port::PB3,
51 miso: port::PB4,
52 cs: port::PB2,
53}
54
55#[cfg(feature = "attiny167")]
56pub type Spi = avr_hal_generic::spi::Spi<
57 crate::Attiny,
58 crate::pac::SPI,
59 port::PA5,
60 port::PA4,
61 port::PA2,
62 port::PA6,
63>;
64#[cfg(feature = "attiny167")]
65avr_hal_generic::impl_spi! {
66 hal: crate::Attiny,
67 peripheral: crate::pac::SPI,
68 sclk: port::PA5,
69 mosi: port::PA4,
70 miso: port::PA2,
71 cs: port::PA6,
72}