1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
//! Memory-mapped registers. //! //! # Mappings and Tokens //! //! Most register should be already mapped by platform crates. //! //! ``` //! # #![feature(proc_macro)] //! # use std as core; //! use core::mem::size_of_val; //! use drone_core::reg::{tokens, mappings}; //! use drone_core::reg::prelude::*; //! //! mappings! { //! /// SysTick timer. //! STK; // block name //! //! /// SysTick control and status register. //! CTRL { // register name //! 0xE000_E010 // memory address //! 0x20 // bit size //! 0x0000_0000 // reset value //! RReg WReg; // list of marker traits for the register //! //! /// Counter enable. //! ENABLE { // field name //! 0 // offset //! 1 // width //! RRegField WRegField // list of marker traits for the field //! } //! } //! } //! //! tokens! { //! /// Register tokens. //! RegIndex; //! //! STK { //! /// SysTick control and status register. //! CTRL; //! } //! } //! //! fn main() { //! let regs = unsafe { RegIndex::new() }; //! assert_eq!(size_of_val(®s.stk_ctrl.enable), 0); //! assert_eq!(size_of_val(®s.stk_ctrl), 0); //! assert_eq!(size_of_val(®s), 0); //! } //! ``` pub mod prelude; mod field; mod hold; mod raw; #[cfg_attr(feature = "clippy", allow(module_inception))] mod reg; mod tag; mod tokens; mod val; pub use self::field::*; pub use self::hold::*; pub use self::raw::*; pub use self::reg::*; pub use self::tag::*; pub use self::tokens::*; pub use self::val::*; pub use drone_core_macros::{reg_mappings as mappings, reg_tokens as tokens}; /// Forkable token. pub trait RegFork { /// Returns a duplicate of the token. fn fork(&mut self) -> Self; }