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}