In a conventional computing system with a microcontroller, a system interrupt controller has dedicated interrupt inputs to receive dedicated interrupts from each of the available fixed-function peripherals, such as system timers, comparators, analog-to-digital converters (ADCs), etc. For example, FIG. 1A illustrates a block diagram of a conventional computing system having an interrupt controller coupled between a processing core and multiple peripherals. As shown in the figure, three dedicated interrupt inputs receive interrupts from the three fixed-function peripherals A, B, and C, respectively. In the conventional system 100, the interrupts from the fixed-function peripherals are routed to a given interrupt input. Typically, there is a one-to-one mapping, each fixed-function peripheral will use a dedicated interrupt input. FIG. 1B illustrates a conventional interrupt-mapping scheme of FIG. 1A having a one-to-one mapping between the interrupt input and the peripheral.
The conventional technology is inflexible. All interrupt inputs of the interrupt controller are predefined and cannot be changed. As such, users of the conventional system have to tailor their application design to use the interrupt signaling options from the pre-defined peripheral connections.
Another issue with the conventional approach is that the conventional system implements hardware and register support for controlling interrupts for the maximum number of fixed-function peripherals in the system. Some of this support hardware will go to waste because, typically, not all of these interrupts are used; and the ones not being used cannot be reassigned or reused.
In addition, the fixed-function peripherals generate specific waveforms, such as for pulse- or level-triggered events for the interrupts. Thus, the conventional systems that include programmable logic may not receive other signal types as interrupts from the programmable logic, since the interrupt controller expects a pulse- or level-triggered signal at its inputs.