vectors_intc.S 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include "sdkconfig.h"
  7. #include "soc/soc.h"
  8. #if ETS_INT_WDT_INUM != 24
  9. #error "ETS_INT_WDT_INUM expected to be 24"
  10. #endif
  11. /* If memory protection interrupts are meant to trigger a panic, attach them to panic handler,
  12. * else, attach them to the interrupt handler. */
  13. #if CONFIG_ESP_SYSTEM_MEMPROT_FEATURE
  14. #define MEMPROT_ISR _panic_handler
  15. #else
  16. #define MEMPROT_ISR _interrupt_handler
  17. #endif // CONFIG_ESP_SYSTEM_MEMPROT_FEATURE
  18. /* Same goes for the assist debug interrupt */
  19. #if CONFIG_ESP_SYSTEM_HW_STACK_GUARD
  20. #define ASTDBG_ISR _panic_handler
  21. #else
  22. #define ASTDBG_ISR _interrupt_handler
  23. #endif // CONFIG_ESP_SYSTEM_HW_STACK_GUARD
  24. /* Handlers defined in the `vector.S` file, common to all RISC-V targets */
  25. .global _interrupt_handler
  26. .global _panic_handler
  27. .section .exception_vectors_table.text
  28. /* This is the vector table. MTVEC points here.
  29. *
  30. * Use 4-byte instructions here. 1 instruction = 1 entry of the table.
  31. * The CPU jumps to MTVEC (i.e. the first entry) in case of an exception,
  32. * and (MTVEC & 0xfffffffc) + (mcause & 0x7fffffff) * 4, in case of an interrupt.
  33. *
  34. * Note: for our CPU, we need to place this on a 256-byte boundary, as CPU
  35. * only uses the 24 MSBs of the MTVEC, i.e. (MTVEC & 0xffffff00).
  36. */
  37. .balign 0x100
  38. /* Since each entry must take 4-byte, let's temporarily disable the compressed
  39. * instruction set that could potentially generate 2-byte instructions. */
  40. .option push
  41. .option norvc
  42. .global _vector_table
  43. .type _vector_table, @function
  44. _vector_table:
  45. j _panic_handler /* 0: Exception entry */
  46. j _interrupt_handler /* 1: Free interrupt number */
  47. j _interrupt_handler /* 2: Free interrupt number */
  48. j _interrupt_handler /* 3: Free interrupt number */
  49. j _interrupt_handler /* 4: Free interrupt number */
  50. j _interrupt_handler /* 5: Free interrupt number */
  51. j _interrupt_handler /* 6: Free interrupt number */
  52. j _interrupt_handler /* 7: Free interrupt number */
  53. j _interrupt_handler /* 8: Free interrupt number */
  54. j _interrupt_handler /* 9: Free interrupt number */
  55. j _interrupt_handler /* 10: Free interrupt number */
  56. j _interrupt_handler /* 11: Free interrupt number */
  57. j _interrupt_handler /* 12: Free interrupt number */
  58. j _interrupt_handler /* 13: Free interrupt number */
  59. j _interrupt_handler /* 14: Free interrupt number */
  60. j _interrupt_handler /* 15: Free interrupt number */
  61. j _interrupt_handler /* 16: Free interrupt number */
  62. j _interrupt_handler /* 17: Free interrupt number */
  63. j _interrupt_handler /* 18: Free interrupt number */
  64. j _interrupt_handler /* 19: Free interrupt number */
  65. j _interrupt_handler /* 20: Free interrupt number */
  66. j _interrupt_handler /* 21: Free interrupt number */
  67. j _interrupt_handler /* 22: Free interrupt number */
  68. j _interrupt_handler /* 23: Free interrupt number */
  69. j _panic_handler /* 24: ETS_INT_WDT_INUM panic-interrupt (soc-level panic) */
  70. j _panic_handler /* 25: ETS_CACHEERR_INUM panic-interrupt (soc-level panic) */
  71. j MEMPROT_ISR /* 26: ETS_MEMPROT_ERR_INUM handler (soc-level panic) */
  72. j ASTDBG_ISR /* 27: ETS_ASSIST_DEBUG_INUM handler (soc-level panic) */
  73. j _interrupt_handler /* 28: Free interrupt number */
  74. j _interrupt_handler /* 29: Free interrupt number */
  75. j _interrupt_handler /* 30: Free interrupt number */
  76. j _interrupt_handler /* 31: Free interrupt number */
  77. .size _vector_table, .-_vector_table
  78. /* Re-enable the compressed instruction set it is was enabled before */
  79. .option pop