projects
/
bertos.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add wizard tag.
[bertos.git]
/
bertos
/
cpu
/
cortex-m3
/
drv
/
irq_cm3.c
diff --git
a/bertos/cpu/cortex-m3/drv/irq_cm3.c
b/bertos/cpu/cortex-m3/drv/irq_cm3.c
index d71876fe47c4efd700c54c6e9139c6915671182c..14311d9567b56cabb60a0316aa5be74d7f99c289 100644
(file)
--- a/
bertos/cpu/cortex-m3/drv/irq_cm3.c
+++ b/
bertos/cpu/cortex-m3/drv/irq_cm3.c
@@
-35,13
+35,20
@@
* \author Andrea Righi <arighi@develer.com>
*/
* \author Andrea Righi <arighi@develer.com>
*/
+#include "irq_cm3.h"
+
#include <cfg/debug.h> /* ASSERT() */
#include <cfg/log.h> /* LOG_ERR() */
#include <cpu/irq.h>
#include <cfg/debug.h> /* ASSERT() */
#include <cfg/log.h> /* LOG_ERR() */
#include <cpu/irq.h>
-#include "irq_cm3.h"
+
+#ifdef __IAR_SYSTEMS_ICC__
+#pragma data_alignment=0x400
+static void (*irq_table[NUM_INTERRUPTS])(void);
+#else
static void (*irq_table[NUM_INTERRUPTS])(void)
__attribute__((section("vtable")));
static void (*irq_table[NUM_INTERRUPTS])(void)
__attribute__((section("vtable")));
+#endif
/* Priority register / IRQ number table */
static const uint32_t nvic_prio_reg[] =
/* Priority register / IRQ number table */
static const uint32_t nvic_prio_reg[] =
@@
-61,7
+68,11
@@
static NAKED NORETURN void unhandled_isr(void)
{
register uint32_t reg;
{
register uint32_t reg;
+#ifdef __IAR_SYSTEMS_ICC__
+ reg = CPU_READ_IPSR();
+#else
asm volatile ("mrs %0, ipsr" : "=r"(reg));
asm volatile ("mrs %0, ipsr" : "=r"(reg));
+#endif
LOG_ERR("unhandled IRQ %lu\n", reg);
while (1)
PAUSE;
LOG_ERR("unhandled IRQ %lu\n", reg);
while (1)
PAUSE;