pub struct Intc { /* private fields */ }
Implementations§
Source§impl Intc
impl Intc
pub const fn new(base: StaticRef<IntcRegisters>) -> Self
Sourcepub fn map_interrupts(&self)
pub fn map_interrupts(&self)
The ESP32C3 is interesting. It allows interrupts to be mapped on the
fly by setting the intr_map
registers. This feature is completely
undocumented. The ESP32 HAL and projects that use that (like Zephyr)
call into the ROM code to enable interrupts which maps the interrupts.
In Tock we map them ourselves so we don’t need to call into the ROM.
Sourcepub fn clear_all_pending(&self)
pub fn clear_all_pending(&self)
Clear all pending interrupts.
Sourcepub fn enable_all(&self)
pub fn enable_all(&self)
Enable all interrupts.
Sourcepub fn disable_all(&self)
pub fn disable_all(&self)
Disable all interrupts.
Sourcepub fn next_pending(&self) -> Option<u32>
pub fn next_pending(&self) -> Option<u32>
Get the index (0-256) of the lowest number pending interrupt, or None
if
none is pending. RISC-V Intc has a “claim” register which makes it easy
to grab the highest priority pending interrupt.
Sourcepub unsafe fn save_interrupt(&self, irq: u32)
pub unsafe fn save_interrupt(&self, irq: u32)
Save the current interrupt to be handled later
This will save the interrupt at index internally to be handled later.
Interrupts must be disabled before this is called.
Saved interrupts can be retrieved by calling get_saved_interrupts()
.
Saved interrupts are cleared when 'complete()
is called.
Sourcepub fn get_saved_interrupts(&self) -> Option<u32>
pub fn get_saved_interrupts(&self) -> Option<u32>
The next_pending()
function will only return enabled interrupts.
This function will return a pending interrupt that has been disabled by
save_interrupt()
.