Module esp32c3_hal::interrupt
source · Expand description
Interrupt support
Overview
The interrupt
driver is a crucial module for ESP chips. Its primary
purpose is to manage and handle interrupts, which are asynchronous events
requiring immediate attention from the CPU. Interrupts are essential in
various applications, such as real-time tasks, I/O communications, and
handling external events like hardware signals.
The core functionality of the interrupt
driver revolves around the
management of interrupts. When an interrupt occurs, it temporarily stops the
ongoing CPU operations, saves its current state, and starts executing the
corresponding interrupt service routine (ISR). The interrupt service routine
is a user-defined function that performs the necessary actions to handle the
specific interrupt. Once the ISR is executed, the driver restores the saved
CPU state and resumes normal program execution.
In scenarios where multiple interrupts may occur simultaneously, the
interrupt driver determines the priority
of each interrupt. This
prioritization ensures that critical or high-priority tasks are handled
first. It helps prevent delays in time-sensitive applications and allows the
system to allocate resources efficiently. This functionality is provided and
implemented by the priority
enum.
Example
#[entry]
fn main() -> ! {
...
critical_section::with(|cs| SWINT.borrow_ref_mut(cs).replace(sw_int));
interrupt::enable(
peripherals::Interrupt::FROM_CPU_INTR0,
interrupt::Priority::Priority1,
)
.unwrap();
loop {}
}
#[interrupt]
fn FROM_CPU_INTR0() {
esp_println::println!("SW interrupt0");
critical_section::with(|cs| {
SWINT
.borrow_ref_mut(cs)
.as_mut()
.unwrap()
.reset(SoftwareInterrupt::SoftwareInterrupt0);
});
}
Structs
- Registers saved in trap handler
Enums
- Enumeration of available CPU interrupts. It is possible to create a handler for each of the interrupts. (e.g.
interrupt3
) - Interrupt Error
- Interrupt kind
- Interrupt priority levels.
Functions
- Clear a CPU interrupt
- Disable the given peripheral interrupt.
- Enables a interrupt at a given priority
- Enable a CPU interrupt
- Get status of peripheral interrupts
- map⚠Assign a peripheral interrupt to an CPU interrupt.
- Set the interrupt kind (i.e. level or edge) of an CPU interrupt
- Set the priority level of an CPU interrupt