Module f3::examples::spi_read_single [] [src]

SPI - read one of the gyroscope registers

#![no_main]
#![no_std]

#[macro_use]
extern crate f3;

use f3::peripheral;

#[export_name = "main"]
pub fn main() -> ! {
    // WHO_AM_I
    const REGISTER_ADDRESS: u8 = 0x0f;
    // Read the register
    const READ: u8 = 1 << 7;

    let value = unsafe {
        let spi1 = peripheral::spi1_mut();
        let gpioe = peripheral::gpioe();

        // CS: low
        gpioe.bsrr.write(|w| w.br3(true));

        while !spi1.sr.read().txe() {}
        spi1.dr.write_u8(READ | REGISTER_ADDRESS);
        while !spi1.sr.read().txe() {}
        spi1.dr.write_u8(0x0);

        while !spi1.sr.read().rxne() {}
        spi1.dr.read_u8();
        while !spi1.sr.read().rxne() {}

        // CS: high
        gpioe.bsrr.write(|w| w.bs3(true));

        spi1.dr.read_u8()
    };

    iprintln!("0x{:02x} - 0x{:02x}", REGISTER_ADDRESS, value);

    loop {}
}