Sema

Struct Sema 

Source
pub struct Sema { /* private fields */ }
Expand description

The Semaphore peripheral allows multiple cores in a system to cooperate when accessing shred resources. The peripheral contains eight semaphores that can be atomically set and cleared. It is left to the discretion of the software architect to decide how and when the semaphores are used and how they are allocated. Existing hardware does not have to be modified for this type of cooperative sharing, and the use of semaphores is exclusively within the software domain.

Implementations§

Source§

impl Sema

Source

pub const PTR: *const RegisterBlock = {0x4003e000 as *const sema::RegisterBlock}

Pointer to the register block

Source

pub const fn ptr() -> *const RegisterBlock

Return the pointer to the register block

Source

pub unsafe fn steal() -> Self

Steal an instance of this peripheral

§Safety

Ensure that the new instance of the peripheral cannot be used in a way that may race with any existing instances, for example by only accessing read-only or write-only registers, or by consuming the original peripheral and using critical sections to coordinate access between multiple new instances.

Additionally, other software such as HALs may rely on only one peripheral instance existing to ensure memory safety; ensure no stolen instances are passed to such software.

Methods from Deref<Target = RegisterBlock>§

Source

pub fn semaphores(&self, n: usize) -> &Semaphores

0x00..0x20 - Read to test and set, returns prior value. Write 0 to clear semaphore.

Source

pub fn semaphores_iter(&self) -> impl Iterator<Item = &Semaphores>

Iterator for array of: 0x00..0x20 - Read to test and set, returns prior value. Write 0 to clear semaphore.

Source

pub fn irq0(&self) -> &Irq0

0x40 - Semaphore IRQ0 register.

Source

pub fn mail0(&self) -> &Mail0

0x44 - Semaphore Mailbox 0 register.

Source

pub fn irq1(&self) -> &Irq1

0x48 - Semaphore IRQ1 register.

Source

pub fn mail1(&self) -> &Mail1

0x4c - Semaphore Mailbox 1 register.

Source

pub fn status(&self) -> &Status

0x100 - Semaphore status bits. 0 indicates the semaphore is free, 1 indicates taken.

Trait Implementations§

Source§

impl Debug for Sema

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Deref for Sema

Source§

type Target = RegisterBlock

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl Send for Sema

Auto Trait Implementations§

§

impl Freeze for Sema

§

impl RefUnwindSafe for Sema

§

impl !Sync for Sema

§

impl Unpin for Sema

§

impl UnwindSafe for Sema

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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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.