Struct PL011

Source
pub struct PL011<UART> {
    pub regs: UART,
    /* private fields */
}
Expand description

Struct representing the actual driver.

Notice that there are no silly ideas like setting the baud rate, or assigning GPIO pins to the driver: the qemu implementation doesnt need any of that, we can just write to the registers directly.

Implements embedded_hal::serial as well as core::fmt::Write

§Examples

use pl011_qemu;
// build a driver for UART1
let mut uart = pl011_qemu::PL011::new(pl011_qemu::UART1::take().unwrap());

Fields§

§regs: UART

owned copy of the underlying uart registers.

Since they are moved into this struct, no one else can access them after the driver is initialized

Implementations§

Source§

impl<T> PL011<T>
where T: ConstRegBlockPtr<PL011_Regs>,

Source

pub fn new(uart: T) -> Self

Initialize a UART driver. Needs a UART struct to be passed in

Source

pub fn split(self) -> (Tx<T>, Rx<T>)

splits a single PL011 uart object into separate Rx and Tx streams.

Useful when you want to separate the two different halves of the UART and use them in different parts of the application

Note that the Rx and Tx structs do not contain a reference to the underlying UART, this is because once you split the UART in half, it is no longer possible to interact with the uart hardware directly, since the other half (rx or tx) might be using it at the same time.

Source

pub fn write_byte(&self, data: u8)

writes a single byte out the uart

spins until space is available in the fifo

Source

pub fn read_byte(&self) -> u8

reads a single byte out the uart

spins until a byte is available in the fifo

Trait Implementations§

Source§

impl<T> Write for PL011<T>
where Tx<T>: Write,

Source§

fn write_str(&mut self, s: &str) -> Result

Writes a string slice into this writer, returning whether the write succeeded. Read more
1.1.0 · Source§

fn write_char(&mut self, c: char) -> Result<(), Error>

Writes a char into this writer, returning whether the write succeeded. Read more
1.0.0 · Source§

fn write_fmt(&mut self, args: Arguments<'_>) -> Result<(), Error>

Glue for usage of the write! macro with implementors of this trait. Read more
Source§

impl<T> Read<u8> for PL011<T>
where Rx<T>: Read<u8, Error = Error>,

Source§

type Error = Error

Read error
Source§

fn read(&mut self) -> Result<u8, Self::Error>

Reads a single word from the serial interface
Source§

impl<T> Write<u8> for PL011<T>
where Tx<T>: Write<u8, Error = Error>,

Source§

type Error = Error

Write error
Source§

fn write(&mut self, word: u8) -> Result<(), Self::Error>

Writes a single word to the serial interface
Source§

fn flush(&mut self) -> Result<(), Self::Error>

Ensures that none of the previously written words are still buffered

Auto Trait Implementations§

§

impl<UART> Freeze for PL011<UART>
where UART: Freeze,

§

impl<UART> RefUnwindSafe for PL011<UART>
where UART: RefUnwindSafe,

§

impl<UART> Send for PL011<UART>
where UART: Send,

§

impl<UART> Sync for PL011<UART>
where UART: Sync,

§

impl<UART> Unpin for PL011<UART>
where UART: Unpin,

§

impl<UART> UnwindSafe for PL011<UART>
where UART: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.