isr.c 1.6 KB
#include "rt0.h"
extern const void * _stack_start;

/* Interrupt Service Routines are void->void functions */
typedef void(*ISR)(void);

/* Notice: The Cortex-M4 expects all jumps to be made at an odd address when
 * jumping to Thumb code. For example, if you want to execute Thumb code at
 * address 0x100, you'll have to jump to 0x101. Luckily, this idiosyncrasy is
 * properly handled by the C compiler that will generate proper addresses when
 * using function pointers. */

#define INITIALISATION_VECTOR_SIZE 0x6B

ISR InitialisationVector[INITIALISATION_VECTOR_SIZE]
  __attribute__((section(".isr_vector_table")))
  = {
  (ISR)&_stack_start, // Stack start
  start, // Reset service routine,
  0, // NMI service routine,
  abort, // HardFault service routine,
  0, // MemManage service routine,
  0, // BusFault service routine,
  0, // UsageFault service routine,
  0, 0, 0, 0, // Reserved
  0, // SVCall service routine,
  0, // DebugMonitor service routine,
  0, // Reserved
  0, // PendSV service routine,
  0, // SysTick service routine
  0, // WWDG service routine
  0, // PVD service routine
  0, // TampStamp service routine
  0, // RtcWakeup service routine
  0, // Flash service routine
  0, // RCC service routine
  0, // EXTI0 service routine
  0, // EXTI1 service routine
  0, // EXTI2 service routine
  0, // EXTI3 service routine
  0, // EXTI4 service routine
  0, // DMA1Stream0 service routine
  0, // DMA1Stream1 service routine
  0, // DMA1Stream2 service routine
  0, // DMA1Stream3 service routine
  0, // DMA1Stream4 service routine
  0, // DMA1Stream5 service routine
  0  // DMA1Stream6 service routine
};