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}