summaryrefslogtreecommitdiff
path: root/entry.c
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2014-07-30 16:09:39 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2014-12-10 18:50:09 +0900
commit5137db82902ded4cabb4667ade17d1732f73c736 (patch)
tree19c16f9d6b6d0320765d15f3d988f10810712155 /entry.c
parent522380097ea768e7474c0de8195cc0ced03904e8 (diff)
Cortex-M0 works.
Diffstat (limited to 'entry.c')
-rw-r--r--entry.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/entry.c b/entry.c
index 1a8e944..0036a3a 100644
--- a/entry.c
+++ b/entry.c
@@ -379,9 +379,22 @@ static void nmi (void)
for (;;);
}
+extern void svc (void);
+
static void hard_fault (void)
{
+#if 1
+ register uint32_t primask;
+
+ asm ("mrs %0, PRIMASK" : "=r" (primask));
+
+ if (primask)
+ asm volatile ("b svc");
+ else
+ for (;;);
+#else
for (;;);
+#endif
}
static void mem_manage (void)
@@ -462,8 +475,11 @@ void entry (void)
"bl chx_systick_init\n\t"
"bl gpio_init\n\t"
/* Enable interrupts. */
+#if __ARM_ARCH_6M__
+#else
"mov r0, #0\n\t"
"msr BASEPRI, r0\n\t"
+#endif
"cpsie i\n\t"
/* Call main. */
"mov r1, r0\n\t"