| // Copyright lowRISC contributors. |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| // SPDX-License-Identifier: Apache-2.0 |
| |
| /** |
| * Interrupt handler vector, set up so that all interrupts are |
| * caught and loop forever. |
| * |
| * See the Ibex manual, Chapter 11, for more information. |
| */ |
| // NOTE: The "ax" flag below is necessary to ensure that this section |
| // is allocated executable space in ROM by the linker. |
| .section .vectors, "ax" |
| .option push |
| |
| // Disable RISC-V instruction compression: we need all instructions to |
| // be exactly word wide in the interrupt vector. |
| .option norvc |
| |
| // Disable RISC-V linker relaxation, as it can compress instructions at |
| // link-time, which we also really don't want. |
| .option norelax |
| |
| // Exception handler. |
| .org 0x00 |
| j exception_handler |
| |
| // Software interrupt handler. |
| .org 0x0c |
| j default_irq_handler |
| |
| // Timer interrupt handler. |
| .org 0x1c |
| j default_irq_handler |
| |
| // External interrupt handler |
| .org 0x2c |
| j default_irq_handler |
| |
| // Fast interrupts, 0 through 14. |
| // Since there are 15 of these in a continuous block, |
| // we just repeat the same instruction. |
| .org 0x40 |
| .rept 15 |
| j default_irq_handler |
| .endr |
| |
| // Non-maskable interrupt (NMI) handler. |
| .org 0x7c |
| j default_irq_handler |
| |
| // Reset vector, the initial entry point after reset. |
| .org 0x80 |
| j _reset_start |
| |
| .option pop |
| |
| // Put these handlers in the code section. |
| .text |
| /** |
| * Default exception handler; loops forever. |
| */ |
| exception_handler: |
| wfi |
| j exception_handler |
| |
| /** |
| * Default interrupt handler; loops forever. |
| */ |
| default_irq_handler: |
| wfi |
| j default_irq_handler |