add new M33 processor exception handlers (#2482)

This commit is contained in:
Graham Sanderson 2025-05-29 08:18:05 -05:00 committed by GitHub
parent 6613aa45a5
commit 0722de395c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 30 additions and 2 deletions

View file

@ -52,7 +52,12 @@
#if PICO_RP2350 #if PICO_RP2350
#define isr_nmi NMI_Handler #define isr_nmi NMI_Handler
#define isr_hardfault HardFault_Handler #define isr_hardfault HardFault_Handler
#define isr_memmanage MemManage_Handler
#define isr_busfault BusFault_Handler
#define isr_usagefault UsageFault_Handler
#define isr_securefault SecureFault_Handler
#define isr_svcall SVC_Handler #define isr_svcall SVC_Handler
#define isr_debugmonitor DebugMon_Handler
#define isr_pendsv PendSV_Handler #define isr_pendsv PendSV_Handler
#define isr_systick SysTick_Handler #define isr_systick SysTick_Handler
#define isr_irq0 TIMER0_IRQ_0_Handler #define isr_irq0 TIMER0_IRQ_0_Handler

View file

@ -52,15 +52,26 @@ __vectors:
#else #else
.word isr_nmi .word isr_nmi
.word isr_hardfault .word isr_hardfault
#if PICO_RP2040
.word isr_invalid // Reserved, should never fire .word isr_invalid // Reserved, should never fire
.word isr_invalid // Reserved, should never fire .word isr_invalid // Reserved, should never fire
.word isr_invalid // Reserved, should never fire .word isr_invalid // Reserved, should never fire
.word isr_invalid // Reserved, should never fire .word isr_invalid // Reserved, should never fire
#else
.word isr_memmanage
.word isr_busfault
.word isr_usagefault
.word isr_securefault
#endif
.word isr_invalid // Reserved, should never fire .word isr_invalid // Reserved, should never fire
.word isr_invalid // Reserved, should never fire .word isr_invalid // Reserved, should never fire
.word isr_invalid // Reserved, should never fire .word isr_invalid // Reserved, should never fire
.word isr_svcall .word isr_svcall
#if PICO_RP2040
.word isr_invalid // Reserved, should never fire .word isr_invalid // Reserved, should never fire
#else
.word isr_debugmonitor
#endif
.word isr_invalid // Reserved, should never fire .word isr_invalid // Reserved, should never fire
.word isr_pendsv .word isr_pendsv
.word isr_systick .word isr_systick
@ -287,8 +298,20 @@ if_irq_decl 79 isr_irq79
#if PICO_NUM_VTABLE_IRQS > 80 #if PICO_NUM_VTABLE_IRQS > 80
#error more IRQ entries required #error more IRQ entries required
#endif #endif
#if !PICO_RP2040
// since these are disabled by default, map them all to __unhandled_user_irq (will have
// a negative number
decl_isr isr_memmanage
decl_isr isr_busfault
decl_isr isr_usagefault
decl_isr isr_securefault
decl_isr isr_debugmonitor
#endif
// All unhandled USER IRQs fall through to here // All unhandled USER IRQs fall through to here.
// Additionally, if the Armv9-M MemManage/BusFault/UsageFault/SecureFault/DebugMonitor exceptions
// are enabled, but the handlers are not defined, then unhandled_user_irq_num_in_r0 will
// also be reached, but with a negative exception number (e.g. MemManage == -12)
.global __unhandled_user_irq .global __unhandled_user_irq
.thumb_func .thumb_func
__unhandled_user_irq: __unhandled_user_irq:
@ -305,7 +328,7 @@ unhandled_user_irq_num_in_r0:
decl_isr_bkpt isr_invalid decl_isr_bkpt isr_invalid
#if !PICO_MINIMAL_STORED_VECTOR_TABLE #if !PICO_MINIMAL_STORED_VECTOR_TABLE
// these are separated out for clarity // these are separated out into individual BKPT instructions with label for clarity
decl_isr_bkpt isr_nmi decl_isr_bkpt isr_nmi
decl_isr_bkpt isr_hardfault decl_isr_bkpt isr_hardfault
decl_isr_bkpt isr_svcall decl_isr_bkpt isr_svcall