/*****************************************************************************
 * Copyright (c) 2014 Rowley Associates Limited.                             *
 *                                                                           *
 * This file may be distributed under the terms of the License Agreement     *
 * provided with this software.                                              *
 *                                                                           *
 * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING THE   *
 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. *
 *****************************************************************************/

.macro ISR_HANDLER name=
  .section .vectors, "ax"
  .word \name
  .section .init, "ax"
  .thumb_func
  .weak \name
\name:
1: b 1b /* endless loop */
.endm

.macro ISR_RESERVED
  .section .vectors, "ax"
  .word 0
.endm

  .syntax unified
  .global reset_handler

  .section .vectors, "ax"
  .code 16 
  .global _vectors

.macro DEFAULT_ISR_HANDLER name=
  .thumb_func
  .weak \name
\name:
1: b 1b /* endless loop */
.endm

_vectors:
  .word __stack_end__
  .word reset_handler
ISR_HANDLER NMI_Handler
ISR_HANDLER HardFault_Handler
ISR_HANDLER MemoryManagement_Handler
ISR_HANDLER BusFault_Handler
ISR_HANDLER UsageFault_Handler
ISR_RESERVED
ISR_RESERVED
ISR_RESERVED
ISR_RESERVED
ISR_HANDLER SVC_Handler
ISR_HANDLER DebugMon_Handler
ISR_RESERVED
ISR_HANDLER PendSV_Handler
ISR_HANDLER SysTick_Handler
  // External interrupts start here
ISR_HANDLER   POWER_CLOCK_IRQHandler
ISR_HANDLER   RADIO_IRQHandler
ISR_HANDLER   UARTE0_UART0_IRQHandler
ISR_HANDLER   SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler
ISR_HANDLER   SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler
ISR_HANDLER   NFCT_IRQHandler
ISR_HANDLER   GPIOTE_IRQHandler
ISR_HANDLER   SAADC_IRQHandler
ISR_HANDLER   TIMER0_IRQHandler
ISR_HANDLER   TIMER1_IRQHandler
ISR_HANDLER   TIMER2_IRQHandler
ISR_HANDLER   RTC0_IRQHandler
ISR_HANDLER   TEMP_IRQHandler
ISR_HANDLER   RNG_IRQHandler
ISR_HANDLER   ECB_IRQHandler
ISR_HANDLER   CCM_AAR_IRQHandler
ISR_HANDLER   WDT_IRQHandler
ISR_HANDLER   RTC1_IRQHandler
ISR_HANDLER   QDEC_IRQHandler
ISR_HANDLER   COMP_LPCOMP_IRQHandler
ISR_HANDLER   SWI0_EGU0_IRQHandler
ISR_HANDLER   SWI1_EGU1_IRQHandler
ISR_HANDLER   SWI2_EGU2_IRQHandler
ISR_HANDLER   SWI3_EGU3_IRQHandler
ISR_HANDLER   SWI4_EGU4_IRQHandler
ISR_HANDLER   SWI5_EGU5_IRQHandler
ISR_HANDLER   TIMER3_IRQHandler
ISR_HANDLER   TIMER4_IRQHandler
ISR_HANDLER   PWM0_IRQHandler
ISR_HANDLER   PDM_IRQHandler
ISR_RESERVED                       /*Reserved */
ISR_RESERVED                       /*Reserved */
ISR_HANDLER   MWU_IRQHandler
ISR_HANDLER   PWM1_IRQHandler
ISR_HANDLER   PWM2_IRQHandler
ISR_HANDLER   SPIM2_SPIS2_SPI2_IRQHandler
ISR_HANDLER   RTC2_IRQHandler
ISR_HANDLER   I2S_IRQHandler
  .section .vectors, "ax"
_vectors_end:

  .section .init, "ax"
  .thumb_func

  reset_handler:

#ifndef __NO_SYSTEM_INIT
  ldr r0, =__SRAM_segment_end__
  mov sp, r0
  bl SystemInit
#endif

  b _start

#ifndef __NO_SYSTEM_INIT
  .thumb_func
  .weak SystemInit
SystemInit:
  bx lr
#endif



