rp-pac

Crates

git

Versions

rp235x

Flavors

Struct rp_pac::sio::Sio

source ·
pub struct Sio { /* private fields */ }
Expand description

Single-cycle IO block Provides core-local and inter-core hardware for the two processors, with single-cycle access.

Implementations§

source§

impl Sio

source

pub const unsafe fn from_ptr(ptr: *mut ()) -> Self

source

pub const fn as_ptr(&self) -> *mut ()

source

pub const fn cpuid(self) -> Reg<u32, RW>

Processor core identifier

source

pub const fn gpio_in(self, n: usize) -> Reg<u32, RW>

Input value for GPIO0…31. In the Non-secure SIO, Secure-only GPIOs (as per ACCESSCTRL) appear as zero.

source

pub const fn gpio_out(self, n: usize) -> Gpio

source

pub const fn gpio_oe(self, n: usize) -> Gpio

source

pub const fn fifo(self) -> Fifo

source

pub const fn spinlock_st(self) -> Reg<u32, RW>

Spinlock state A bitmap containing the state of all 32 spinlocks (1=locked). Mainly intended for debugging.

source

pub const fn interp(self, n: usize) -> Interp

source

pub const fn spinlock(self, n: usize) -> Reg<u32, RW>

Reading from a spinlock address will: - Return 0 if lock is already locked - Otherwise return nonzero, and simultaneously claim the lock Writing (any value) releases the lock. If core 0 and core 1 attempt to claim the same lock simultaneously, core 0 wins. The value returned on success is 0x1 << lock number.

source

pub const fn doorbell_out_set(self) -> Reg<DoorbellOutSet, RW>

Trigger a doorbell interrupt on the opposite core. Write 1 to a bit to set the corresponding bit in DOORBELL_IN on the opposite core. This raises the opposite core’s doorbell interrupt. Read to get the status of the doorbells currently asserted on the opposite core. This is equivalent to that core reading its own DOORBELL_IN status.

source

pub const fn doorbell_out_clr(self) -> Reg<DoorbellOutClr, RW>

Clear doorbells which have been posted to the opposite core. This register is intended for debugging and initialisation purposes. Writing 1 to a bit in DOORBELL_OUT_CLR clears the corresponding bit in DOORBELL_IN on the opposite core. Clearing all bits will cause that core’s doorbell interrupt to deassert. Since the usual order of events is for software to send events using DOORBELL_OUT_SET, and acknowledge incoming events by writing to DOORBELL_IN_CLR, this register should be used with caution to avoid race conditions. Reading returns the status of the doorbells currently asserted on the other core, i.e. is equivalent to that core reading its own DOORBELL_IN status.

source

pub const fn doorbell_in_set(self) -> Reg<DoorbellInSet, RW>

Write 1s to trigger doorbell interrupts on this core. Read to get status of doorbells currently asserted on this core.

source

pub const fn doorbell_in_clr(self) -> Reg<DoorbellInClr, RW>

Check and acknowledge doorbells posted to this core. This core’s doorbell interrupt is asserted when any bit in this register is 1. Write 1 to each bit to clear that bit. The doorbell interrupt deasserts once all bits are cleared. Read to get status of doorbells currently asserted on this core.

source

pub const fn peri_nonsec(self) -> Reg<PeriNonsec, RW>

Detach certain core-local peripherals from Secure SIO, and attach them to Non-secure SIO, so that Non-secure software can use them. Attempting to access one of these peripherals from the Secure SIO when it is attached to the Non-secure SIO, or vice versa, will generate a bus error. This register is per-core, and is only present on the Secure SIO. Most SIO hardware is duplicated across the Secure and Non-secure SIO, so is not listed in this register.

source

pub const fn riscv_softirq(self) -> Reg<RiscvSoftirq, RW>

Control the assertion of the standard software interrupt (MIP.MSIP) on the RISC-V cores. Unlike the RISC-V timer, this interrupt is not routed to a normal system-level interrupt line, so can not be used by the Arm cores. It is safe for both cores to write to this register on the same cycle. The set/clear effect is accumulated across both cores, and then applied. If a flag is both set and cleared on the same cycle, only the set takes effect.

source

pub const fn mtime_ctrl(self) -> Reg<MtimeCtrl, RW>

Control register for the RISC-V 64-bit Machine-mode timer. This timer is only present in the Secure SIO, so is only accessible to an Arm core in Secure mode or a RISC-V core in Machine mode. Note whilst this timer follows the RISC-V privileged specification, it is equally usable by the Arm cores. The interrupts are routed to normal system-level interrupt lines as well as to the MIP.MTIP inputs on the RISC-V cores.

source

pub const fn mtime(self) -> Reg<u32, RW>

Read/write access to the high half of RISC-V Machine-mode timer. This register is shared between both cores. If both cores write on the same cycle, core 1 takes precedence.

source

pub const fn mtimeh(self) -> Reg<u32, RW>

Read/write access to the high half of RISC-V Machine-mode timer. This register is shared between both cores. If both cores write on the same cycle, core 1 takes precedence.

source

pub const fn mtimecmp(self) -> Reg<u32, RW>

Low half of RISC-V Machine-mode timer comparator. This register is core-local, i.e., each core gets a copy of this register, with the comparison result routed to its own interrupt line. The timer interrupt is asserted whenever MTIME is greater than or equal to MTIMECMP. This comparison is unsigned, and performed on the full 64-bit values.

source

pub const fn mtimecmph(self) -> Reg<u32, RW>

High half of RISC-V Machine-mode timer comparator. This register is core-local. The timer interrupt is asserted whenever MTIME is greater than or equal to MTIMECMP. This comparison is unsigned, and performed on the full 64-bit values.

source

pub const fn tmds_ctrl(self) -> Reg<TmdsCtrl, RW>

Control register for TMDS encoder.

source

pub const fn tmds_wdata(self) -> Reg<u32, RW>

Write-only access to the TMDS colour data register.

source

pub const fn tmds_peek_single(self) -> Reg<u32, RW>

Get the encoding of one pixel’s worth of colour data, packed into a 32-bit value (3x10-bit symbols). The PEEK alias does not shift the colour register when read, but still advances the running DC balance state of each encoder. This is useful for pixel doubling.

source

pub const fn tmds_pop_single(self) -> Reg<u32, RW>

Get the encoding of one pixel’s worth of colour data, packed into a 32-bit value. The packing is 5 chunks of 3 lanes times 2 bits (30 bits total). Each chunk contains two bits of a TMDS symbol per lane. This format is intended for shifting out with the HSTX peripheral on RP2350. The POP alias shifts the colour register when read, as well as advancing the running DC balance state of each encoder.

source

pub const fn tmds_peek_double_l0(self) -> Reg<u32, RW>

Get lane 0 of the encoding of two pixels’ worth of colour data. Two 10-bit TMDS symbols are packed at the bottom of a 32-bit word. The PEEK alias does not shift the colour register when read, but still advances the lane 0 DC balance state. This is useful if all 3 lanes’ worth of encode are to be read at once, rather than processing the entire scanline for one lane before moving to the next lane.

source

pub const fn tmds_pop_double_l0(self) -> Reg<u32, RW>

Get lane 0 of the encoding of two pixels’ worth of colour data. Two 10-bit TMDS symbols are packed at the bottom of a 32-bit word. The POP alias shifts the colour register when read, according to the values of PIX_SHIFT and PIX2_NOSHIFT.

source

pub const fn tmds_peek_double_l1(self) -> Reg<u32, RW>

Get lane 1 of the encoding of two pixels’ worth of colour data. Two 10-bit TMDS symbols are packed at the bottom of a 32-bit word. The PEEK alias does not shift the colour register when read, but still advances the lane 1 DC balance state. This is useful if all 3 lanes’ worth of encode are to be read at once, rather than processing the entire scanline for one lane before moving to the next lane.

source

pub const fn tmds_pop_double_l1(self) -> Reg<u32, RW>

Get lane 1 of the encoding of two pixels’ worth of colour data. Two 10-bit TMDS symbols are packed at the bottom of a 32-bit word. The POP alias shifts the colour register when read, according to the values of PIX_SHIFT and PIX2_NOSHIFT.

source

pub const fn tmds_peek_double_l2(self) -> Reg<u32, RW>

Get lane 2 of the encoding of two pixels’ worth of colour data. Two 10-bit TMDS symbols are packed at the bottom of a 32-bit word. The PEEK alias does not shift the colour register when read, but still advances the lane 2 DC balance state. This is useful if all 3 lanes’ worth of encode are to be read at once, rather than processing the entire scanline for one lane before moving to the next lane.

source

pub const fn tmds_pop_double_l2(self) -> Reg<u32, RW>

Get lane 2 of the encoding of two pixels’ worth of colour data. Two 10-bit TMDS symbols are packed at the bottom of a 32-bit word. The POP alias shifts the colour register when read, according to the values of PIX_SHIFT and PIX2_NOSHIFT.

Trait Implementations§

source§

impl Clone for Sio

source§

fn clone(&self) -> Sio

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq for Sio

source§

fn eq(&self, other: &Sio) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Copy for Sio

source§

impl Eq for Sio

source§

impl Send for Sio

source§

impl StructuralPartialEq for Sio

source§

impl Sync for Sio

Auto Trait Implementations§

§

impl Freeze for Sio

§

impl RefUnwindSafe for Sio

§

impl Unpin for Sio

§

impl UnwindSafe for Sio

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> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. 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, 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.