1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/***********************************************************************************************************************
 * Copyright (c) 2019 by the authors
 *
 * Author: André Borrmann
 * License: Apache License 2.0
 **********************************************************************************************************************/

//! # Interrupt Types
//!
//! Defining the different possible interrupts of the Raspberry Pi a handler could be registered for.
//!

/// The list of available interrupts on Raspberry Pi 3.
/// Note: Even if it is possible to register an interrupt handler for them the behaviour might be untested/undefined.
/// Please read the corresponding specs for the different interrupts to understand how to acknowledge them inside the
/// individual handler implementation.
///
#[repr(u8)]
#[derive(Copy, Clone)]
pub enum Interrupt {
    // IRQ's appearing in the GPU pending register 1 and 2
    // IRQ 0 - 31 / Bank 1 (only the IRQ's that could be registered)
    SystemTimer1 = 1,
    SystemTimer3 = 3,
    Isp = 8,
    // USB
    Usb = 9, // Synopsys DesignWare Hi-Speed USB 2.0 OTG controller IRQ. Also available as IRQ 75 in basic pending
    CoreSync0 = 12,
    CoreSync1 = 13,
    CoreSync2 = 14,
    CoreSync3 = 15,
    Aux = 29,
    // ARM
    Arm = 30,
    // GPU-DMA
    GpuDma = 31,

    // IRQ 32 - 63 / Bank 2
    /*HostPort        = 32,
    VideoScaler     = 33,
    Ccp2Tx          = 34,
    Sdc             = 35,
    Dsi0            = 36,
    Ave             = 37,
    Cam0            = 38,
    Cam1            = 39,
    Hdmi0           = 40,
    Hdmi1           = 41,
    PixelValve1     = 42,
    I2cSpi          = 43,
    Dsi1            = 44,
    Pwa0            = 45,
    Pwa1            = 46,
    Cpr             = 47,
    Smi             = 48,
    */
    GpioBank0 = 49, // GPIO Bank 0
    GpioBank1 = 50,
    GpioBank2 = 51, // Not existend at BCM2837???
    GpioBank3 = 52,
    I2c = 53,    // also available as IRQ 79 in basic pending
    Spi = 54,    // also available as IRQ 80 in basic pending
    I2sPcm = 55, // also available as IRQ 81 in basic pending
    Sdio = 56,   // also available as IRQ 82 in basic pending
    Pl011 = 57,  // also avialable as IRQ 83 in basic pending
    ArmTimer = 64,
    ArmMailbox = 65,
    ArmDoorbell0 = 66,
    ArmDoorbell1 = 67,
    ArmGpu0Halted = 68,
    ArmGpu1halted = 69,
    ArmIllegalType1 = 70,
    ArmIllegalType0 = 71,
    ArmPending1 = 72,
    ArmPending2 = 73,
}