0
0
Power-electronicsConceptBeginner · 4 min read

Interrupt Service Routine in Embedded C: What It Is and How It Works

An Interrupt Service Routine (ISR) in Embedded C is a special function that runs automatically when a hardware interrupt occurs. It quickly handles the event and then returns control to the main program, allowing the system to respond to real-time events efficiently.
⚙️

How It Works

Imagine you are cooking and suddenly the phone rings. Instead of ignoring it, you quickly pause cooking, answer the phone, and then return to cooking. An Interrupt Service Routine (ISR) works similarly in embedded systems. When a hardware event happens, like a button press or a timer reaching zero, the processor pauses its current task and runs the ISR to handle that event.

The ISR is a small, fast function designed to do only what is necessary to respond to the interrupt. After it finishes, the processor goes back to what it was doing before the interrupt. This mechanism helps embedded devices react quickly to important events without wasting time constantly checking for them.

💻

Example

This example shows a simple ISR in Embedded C that toggles an LED when a timer interrupt occurs.

c
#include <avr/io.h>
#include <avr/interrupt.h>

// Initialize LED pin and timer
void setup() {
    DDRB |= (1 << DDB0); // Set PB0 as output for LED
    TCCR0A = 0;         // Normal mode
    TCCR0B = (1 << CS02) | (1 << CS00); // Prescaler 1024
    TIMSK0 = (1 << TOIE0); // Enable timer overflow interrupt
    sei();              // Enable global interrupts
}

// Interrupt Service Routine for Timer0 overflow
ISR(TIMER0_OVF_vect) {
    PORTB ^= (1 << PORTB0); // Toggle LED on PB0
}

int main() {
    setup();
    while (1) {
        // Main loop does other tasks
    }
    return 0;
}
Output
The LED connected to PB0 toggles ON and OFF repeatedly when the timer overflows.
🎯

When to Use

Use an ISR when your embedded system must respond immediately to hardware events without delay. For example, ISRs are useful for:

  • Reading sensor data as soon as it is ready
  • Handling button presses or switches
  • Managing communication protocols like UART or SPI
  • Timing events precisely with hardware timers

ISRs help keep your program efficient by avoiding constant checking (polling) and letting the processor do other work until an event occurs.

Key Points

  • ISRs run automatically when an interrupt occurs.
  • They should be short and fast to avoid delaying the main program.
  • Global interrupts must be enabled for ISRs to work.
  • ISRs help embedded systems react quickly to real-world events.

Key Takeaways

An ISR is a special function triggered by hardware interrupts to handle events immediately.
Keep ISRs short and efficient to maintain system responsiveness.
Enable global interrupts to allow ISRs to run.
Use ISRs to avoid wasting time polling for events in embedded systems.