Skip to content

Commit 0fca297

Browse files
committed
platform/sam3u: add exception handlers
Signed-off-by: Rafael Silva <perigoso@riseup.net>
1 parent acf1cb1 commit 0fca297

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed

config/families/sam3u.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ source = [
3232
'eefc.c',
3333
'wdt.c',
3434
'pmc.c',
35+
'exceptions.c',
3536
]
3637

3738
[dependencies]

src/platform/sam3u/exceptions.c

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/*
2+
* SPDX-License-Identifier: MIT
3+
* SPDX-FileCopyrightText: 2021 Rafael Silva <perigoso@riseup.net>
4+
*/
5+
6+
#include <sam.h>
7+
8+
#include "util/types.h"
9+
10+
void __attribute__((naked, aligned(4))) _hardfault_isr()
11+
{
12+
__asm__ volatile(" tst lr, #4 \n"
13+
" ite eq \n"
14+
" mrseq r0, msp \n"
15+
" mrsne r0, psp \n"
16+
" ldr r1, [r0, #24] \n"
17+
" ldr r2, hardfault_trace_stack_addr \n"
18+
" bx r2 \n"
19+
" hardfault_trace_stack_addr: .word hardfault_trace_stack \n");
20+
}
21+
22+
void __attribute__((naked, aligned(4))) _memmanage_isr()
23+
{
24+
__asm__ volatile(" tst lr, #4 \n"
25+
" ite eq \n"
26+
" mrseq r0, msp \n"
27+
" mrsne r0, psp \n"
28+
" ldr r1, [r0, #24] \n"
29+
" ldr r2, memmanage_trace_stack_addr \n"
30+
" bx r2 \n"
31+
" memmanage_trace_stack_addr: .word memmanage_trace_stack \n");
32+
}
33+
34+
void __attribute__((naked, aligned(4))) _busfault_isr()
35+
{
36+
__asm__ volatile(" tst lr, #4 \n"
37+
" ite eq \n"
38+
" mrseq r0, msp \n"
39+
" mrsne r0, psp \n"
40+
" ldr r1, [r0, #24] \n"
41+
" ldr r2, busfault_trace_stack_addr \n"
42+
" bx r2 \n"
43+
" busfault_trace_stack_addr: .word busfault_trace_stack \n");
44+
}
45+
46+
void __attribute__((naked, aligned(4))) _usagefault_isr()
47+
{
48+
__asm__ volatile(" tst lr, #4 \n"
49+
" ite eq \n"
50+
" mrseq r0, msp \n"
51+
" mrsne r0, psp \n"
52+
" ldr r1, [r0, #24] \n"
53+
" ldr r2, usagefault_trace_stack_addr \n"
54+
" bx r2 \n"
55+
" usagefault_trace_stack_addr: .word usagefault_trace_stack \n");
56+
}
57+
58+
void hardfault_trace_stack(u32 *pulFaultStackAddress)
59+
{
60+
(void) pulFaultStackAddress;
61+
while (1) continue;
62+
}
63+
64+
void memmanage_trace_stack(u32 *pulFaultStackAddress)
65+
{
66+
(void) pulFaultStackAddress;
67+
while (1) continue;
68+
}
69+
70+
void busfault_trace_stack(u32 *pulFaultStackAddress)
71+
{
72+
(void) pulFaultStackAddress;
73+
while (1) continue;
74+
}
75+
76+
void usagefault_trace_stack(u32 *pulFaultStackAddress)
77+
{
78+
(void) pulFaultStackAddress;
79+
while (1) continue;
80+
}

0 commit comments

Comments
 (0)