#![deny(missing_docs)]
#![deny(warnings)]
#![no_std]
extern crate volatile_register;
#[allow(missing_docs)]
pub mod btim;
#[allow(missing_docs)]
pub mod dbgmcu;
#[allow(missing_docs)]
pub mod gpio;
#[allow(missing_docs)]
pub mod gptim;
#[allow(missing_docs)]
pub mod i2c;
#[allow(missing_docs)]
pub mod rcc;
#[allow(missing_docs)]
pub mod spi;
#[allow(missing_docs)]
pub mod usart;
use btim::BTim;
use dbgmcu::Dbgmcu;
use gpio::Gpio;
use gptim::GpTim;
use i2c::I2c;
use rcc::Rcc;
use spi::Spi;
use usart::Usart;
const GPIOA: usize = 0x48000000;
const GPIOB: usize = 0x48000400;
const GPIOC: usize = 0x48000800;
const GPIOD: usize = 0x48000c00;
const GPIOE: usize = 0x48001000;
const GPIOF: usize = 0x48001400;
const GPIOG: usize = 0x48001800;
const GPIOH: usize = 0x48001c00;
const RCC: usize = 0x40021000;
const TIM2: usize = 0x40000000;
const TIM3: usize = 0x40000400;
const TIM4: usize = 0x40000800;
const USART1: usize = 0x40013800;
const USART2: usize = 0x40004400;
const USART3: usize = 0x40004800;
const SPI1: usize = 0x40013000;
const I2C1: usize = 0x40005400;
const TIM6: usize = 0x40001000;
const TIM7: usize = 0x40001400;
const DBGMCU: usize = 0xe0042000;
pub fn dbgmcu() -> &'static Dbgmcu {
unsafe { deref(DBGMCU) }
}
pub unsafe fn dbgmcu_mut() -> &'static mut Dbgmcu {
deref_mut(DBGMCU)
}
pub fn gpioa() -> &'static Gpio {
unsafe { deref(GPIOA) }
}
pub unsafe fn gpioa_mut() -> &'static mut Gpio {
deref_mut(GPIOA)
}
pub fn gpiob() -> &'static Gpio {
unsafe { deref(GPIOB) }
}
pub unsafe fn gpiob_mut() -> &'static mut Gpio {
deref_mut(GPIOB)
}
pub fn gpioc() -> &'static Gpio {
unsafe { deref(GPIOC) }
}
pub unsafe fn gpioc_mut() -> &'static mut Gpio {
deref_mut(GPIOC)
}
pub fn gpiod() -> &'static Gpio {
unsafe { deref(GPIOD) }
}
pub unsafe fn gpiod_mut() -> &'static mut Gpio {
deref_mut(GPIOD)
}
pub fn gpioe() -> &'static Gpio {
unsafe { deref(GPIOE) }
}
pub unsafe fn gpioe_mut() -> &'static mut Gpio {
deref_mut(GPIOE)
}
pub fn gpiof() -> &'static Gpio {
unsafe { deref(GPIOF) }
}
pub unsafe fn gpiof_mut() -> &'static mut Gpio {
deref_mut(GPIOF)
}
pub fn gpiog() -> &'static Gpio {
unsafe { deref(GPIOG) }
}
pub unsafe fn gpiog_mut() -> &'static mut Gpio {
deref_mut(GPIOG)
}
pub fn gpioh() -> &'static Gpio {
unsafe { deref(GPIOH) }
}
pub unsafe fn gpioh_mut() -> &'static mut Gpio {
deref_mut(GPIOH)
}
pub fn i2c1() -> &'static I2c {
unsafe { deref(I2C1) }
}
pub unsafe fn i2c1_mut() -> &'static mut I2c {
deref_mut(I2C1)
}
pub fn rcc() -> &'static Rcc {
unsafe { deref(RCC) }
}
pub unsafe fn rcc_mut() -> &'static mut Rcc {
deref_mut(RCC)
}
pub fn spi1() -> &'static Spi {
unsafe { deref(SPI1) }
}
pub unsafe fn spi1_mut() -> &'static mut Spi {
deref_mut(SPI1)
}
pub fn tim2() -> &'static GpTim {
unsafe { deref(TIM2) }
}
pub unsafe fn tim2_mut() -> &'static mut GpTim {
deref_mut(TIM2)
}
pub fn tim3() -> &'static GpTim {
unsafe { deref(TIM3) }
}
pub unsafe fn tim3_mut() -> &'static mut GpTim {
deref_mut(TIM3)
}
pub fn tim4() -> &'static GpTim {
unsafe { deref(TIM4) }
}
pub unsafe fn tim4_mut() -> &'static mut GpTim {
deref_mut(TIM4)
}
pub fn tim6() -> &'static BTim {
unsafe { deref(TIM6) }
}
pub unsafe fn tim6_mut() -> &'static mut BTim {
deref_mut(TIM6)
}
pub fn tim7() -> &'static BTim {
unsafe { deref(TIM7) }
}
pub unsafe fn tim7_mut() -> &'static mut BTim {
deref_mut(TIM7)
}
pub fn usart1() -> &'static Usart {
unsafe { deref(USART1) }
}
pub unsafe fn usart1_mut() -> &'static mut Usart {
deref_mut(USART1)
}
pub fn usart2() -> &'static Usart {
unsafe { deref(USART2) }
}
pub unsafe fn usart2_mut() -> &'static mut Usart {
deref_mut(USART2)
}
pub fn usart3() -> &'static Usart {
unsafe { deref(USART3) }
}
pub unsafe fn usart3_mut() -> &'static mut Usart {
deref_mut(USART3)
}
unsafe fn deref<T>(address: usize) -> &'static T {
&*(address as *const T)
}
unsafe fn deref_mut<T>(address: usize) -> &'static mut T {
&mut *(address as *mut T)
}
use core::ptr;
impl spi::Dr {
pub fn read_u8(&self) -> u8 {
unsafe { ptr::read_volatile(self as *const _ as *const u8) }
}
pub fn write_u8(&mut self, value: u8) {
unsafe { ptr::write_volatile(self as *mut _ as *mut u8, value) }
}
}