36 lines
1004 B
ArmAsm
36 lines
1004 B
ArmAsm
/* Copyright 2020 Espressif Systems (Shanghai) PTE LTD
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include "soc/soc.h"
|
|
#include "soc/interrupt_reg.h"
|
|
#include "riscv/rvruntime-frames.h"
|
|
#include "soc/soc_caps.h"
|
|
#include <zephyr/toolchain.h>
|
|
|
|
/* Imports */
|
|
GTEXT(__irq_wrapper)
|
|
|
|
/* This is the vector table. MTVEC points here.
|
|
*
|
|
* Use 4-byte intructions here. 1 instruction = 1 entry of the table.
|
|
* The CPU jumps to MTVEC (i.e. the first entry) in case of an exception,
|
|
* and (MTVEC & 0xfffffffc) + (mcause & 0x7fffffff) * 4, in case of an interrupt.
|
|
*
|
|
* Note: for our CPU, we need to place this on a 256-byte boundary, as CPU
|
|
* only uses the 24 MSBs of the MTVEC, i.e. (MTVEC & 0xffffff00).
|
|
*/
|
|
|
|
.global _esp32c3_vector_table
|
|
.section .exception_vectors.text
|
|
.balign 0x100
|
|
.type _esp32c3_vector_table, @function
|
|
|
|
_esp32c3_vector_table:
|
|
.option push
|
|
.option norvc
|
|
.rept (32)
|
|
j __irq_wrapper /* 32 identical entries, all pointing to the interrupt handler */
|
|
.endr
|