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#[allow(unused_imports)]
32use crate::port;
33pub use avr_hal_generic::spi::*;
34
35#[cfg(feature = "attiny88")]
36pub type Spi = avr_hal_generic::spi::Spi<
37 crate::Attiny,
38 crate::pac::SPI,
39 port::PB5,
40 port::PB3,
41 port::PB4,
42 port::PB2,
43>;
44#[cfg(feature = "attiny88")]
45avr_hal_generic::impl_spi! {
46 hal: crate::Attiny,
47 peripheral: crate::pac::SPI,
48 sclk: port::PB5,
49 mosi: port::PB3,
50 miso: port::PB4,
51 cs: port::PB2,
52}
53
54#[cfg(feature = "attiny167")]
55pub type Spi = avr_hal_generic::spi::Spi<
56 crate::Attiny,
57 crate::pac::SPI,
58 port::PA5,
59 port::PA4,
60 port::PA2,
61 port::PA6,
62>;
63#[cfg(feature = "attiny167")]
64avr_hal_generic::impl_spi! {
65 hal: crate::Attiny,
66 peripheral: crate::pac::SPI,
67 sclk: port::PA5,
68 mosi: port::PA4,
69 miso: port::PA2,
70 cs: port::PA6,
71}