mirror of https://github.com/ARMmbed/mbed-os.git
Merge branch 'master' of https://github.com/mbedmicro/mbed into DEV_DISCOF429ZI
commit
b390f4cc27
|
@ -0,0 +1,29 @@
|
||||||
|
;
|
||||||
|
SAML21J18A
|
||||||
|
;
|
||||||
|
256KB FLASH (0x40000) @ 0x000000000
|
||||||
|
;
|
||||||
|
2KB RAM (0x8000) @ 0x20000000
|
||||||
|
|
||||||
|
|
||||||
|
;
|
||||||
|
SAML21J18A: 256KB FLASH (0x40000) + 32KB RAM (0x8000)
|
||||||
|
LR_IROM1 0x00000000 0x40000 { ;
|
||||||
|
load region size_region
|
||||||
|
ER_IROM1 0x00000000 0x40000 { ;
|
||||||
|
load address = execution address
|
||||||
|
*.o (RESET, +First)
|
||||||
|
*(InRoot$$Sections)
|
||||||
|
.ANY (+RO)
|
||||||
|
}
|
||||||
|
|
||||||
|
;
|
||||||
|
[RAM] Vector table dynamic copy: 45 vectors * 4 bytes = (0xB4) - alignment
|
||||||
|
RW_IRAM1 (0x20000000+0xB4) (0x8000-0xB4)
|
||||||
|
{
|
||||||
|
;
|
||||||
|
RW data
|
||||||
|
.ANY (+RW +ZI)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,194 @@
|
||||||
|
;/**************************************************************************//**
|
||||||
|
; * @file startup_SAML21.s
|
||||||
|
; * @brief CMSIS Cortex-M4 Core Device Startup File for
|
||||||
|
; * Atmel SAML21 Device Series
|
||||||
|
; * @version V1.00
|
||||||
|
; * @date 10. February 2015
|
||||||
|
; *
|
||||||
|
; * @note
|
||||||
|
; * Copyright (C) 2015 ARM Limited. All rights reserved.
|
||||||
|
; *
|
||||||
|
; * @par
|
||||||
|
; * ARM Limited (ARM) is supplying this software for use with Cortex-M
|
||||||
|
; * processor based microcontrollers. This file can be freely distributed
|
||||||
|
; * within development tools that are supporting such ARM based processors.
|
||||||
|
; *
|
||||||
|
; * @par
|
||||||
|
; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
|
||||||
|
; * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
|
||||||
|
; * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
|
||||||
|
; * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
|
||||||
|
; * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
|
||||||
|
; *
|
||||||
|
; ******************************************************************************/
|
||||||
|
__initial_sp EQU 0x20008000 ;Top of RAM
|
||||||
|
|
||||||
|
PRESERVE8
|
||||||
|
THUMB
|
||||||
|
|
||||||
|
|
||||||
|
;Vector Table Mapped to Address 0 at Reset
|
||||||
|
|
||||||
|
AREA RESET, DATA, READONLY
|
||||||
|
EXPORT __Vectors
|
||||||
|
EXPORT __Vectors_End
|
||||||
|
EXPORT __Vectors_Size
|
||||||
|
|
||||||
|
__Vectors DCD __initial_sp ;Top of Stack
|
||||||
|
DCD Reset_Handler ;Reset Handler
|
||||||
|
DCD NMI_Handler ;NMI Handler
|
||||||
|
DCD HardFault_Handler ;Hard Fault Handler
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD SVC_Handler ;SVCall Handler
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD PendSV_Handler ;PendSV Handler
|
||||||
|
DCD SysTick_Handler ;SysTick Handler
|
||||||
|
|
||||||
|
;External Interrupts
|
||||||
|
DCD SYSTEM_Handler ;0 Main Clock, Oscillators Control, 32k Oscillators Control, Peripheral Access Controller, Power Manager, Supply Controller, Trigger Allocator
|
||||||
|
DCD WDT_Handler ;1 Watchdog Timer
|
||||||
|
DCD RTC_Handler ;2 Real-Time Counter
|
||||||
|
DCD EIC_Handler ;3 External Interrupt Controller
|
||||||
|
DCD NVMCTRL_Handler ;4 Non-Volatile Memory Controller
|
||||||
|
DCD DMAC_Handler ;5 Direct Memory Access Controller
|
||||||
|
DCD USB_Handler ;6 Universal Serial Bus
|
||||||
|
DCD EVSYS_Handler ;7 Event System Interface
|
||||||
|
DCD SERCOM0_Handler ;8 Serial Communication Interface 0
|
||||||
|
DCD SERCOM1_Handler ;9 Serial Communication Interface 1
|
||||||
|
DCD SERCOM2_Handler ;10 Serial Communication Interface 2
|
||||||
|
DCD SERCOM3_Handler ;11 Serial Communication Interface 3
|
||||||
|
DCD SERCOM4_Handler ;12 Serial Communication Interface 4
|
||||||
|
DCD SERCOM5_Handler ;13 Serial Communication Interface 5
|
||||||
|
DCD TCC0_Handler ;14 Timer Counter Control 0
|
||||||
|
DCD TCC1_Handler ;15 Timer Counter Control 1
|
||||||
|
DCD TCC2_Handler ;16 Timer Counter Control 2
|
||||||
|
DCD TC0_Handler ;17 Basic Timer Counter 0
|
||||||
|
DCD TC1_Handler ;18 Basic Timer Counter 1
|
||||||
|
DCD TC2_Handler ;19 Basic Timer Counter 2
|
||||||
|
DCD TC3_Handler ;20 Basic Timer Counter 3
|
||||||
|
DCD TC4_Handler ;21 Basic Timer Counter 4
|
||||||
|
DCD ADC_Handler ;22 Analog Digital Converter
|
||||||
|
DCD AC_Handler ;23 Analog Comparators
|
||||||
|
DCD DAC_Handler ;24 Digital-to-Analog Converter
|
||||||
|
DCD PTC_Handler ;25 Peripheral Touch Controller
|
||||||
|
DCD AES_Handler ;26 Advanced Encryption Standard
|
||||||
|
DCD TRNG_Handler ;27 True Random Generator
|
||||||
|
DCD PICOP_Handler ;28 PicoProcessor
|
||||||
|
__Vectors_End
|
||||||
|
|
||||||
|
__Vectors_Size EQU __Vectors_End - __Vectors
|
||||||
|
|
||||||
|
AREA |.text|, CODE, READONLY
|
||||||
|
|
||||||
|
|
||||||
|
;Reset Handler
|
||||||
|
|
||||||
|
Reset_Handler PROC
|
||||||
|
EXPORT Reset_Handler [WEAK]
|
||||||
|
IMPORT SystemInit
|
||||||
|
IMPORT __main
|
||||||
|
LDR R0, =SystemInit
|
||||||
|
BLX R0
|
||||||
|
LDR R0, =__main
|
||||||
|
BX R0
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
|
||||||
|
;Dummy Exception Handlers (infinite loops which can be modified)
|
||||||
|
|
||||||
|
NMI_Handler PROC
|
||||||
|
EXPORT NMI_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
HardFault_Handler\
|
||||||
|
PROC
|
||||||
|
EXPORT HardFault_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
SVC_Handler PROC
|
||||||
|
EXPORT SVC_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
PendSV_Handler PROC
|
||||||
|
EXPORT PendSV_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
SysTick_Handler PROC
|
||||||
|
EXPORT SysTick_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
Default_Handler PROC
|
||||||
|
EXPORT SYSTEM_Handler [WEAK]
|
||||||
|
EXPORT WDT_Handler [WEAK]
|
||||||
|
EXPORT RTC_Handler [WEAK]
|
||||||
|
EXPORT EIC_Handler [WEAK]
|
||||||
|
EXPORT NVMCTRL_Handler [WEAK]
|
||||||
|
EXPORT DMAC_Handler [WEAK]
|
||||||
|
EXPORT USB_Handler [WEAK]
|
||||||
|
EXPORT EVSYS_Handler [WEAK]
|
||||||
|
EXPORT SERCOM0_Handler [WEAK]
|
||||||
|
EXPORT SERCOM1_Handler [WEAK]
|
||||||
|
EXPORT SERCOM2_Handler [WEAK]
|
||||||
|
EXPORT SERCOM3_Handler [WEAK]
|
||||||
|
EXPORT SERCOM4_Handler [WEAK]
|
||||||
|
EXPORT SERCOM5_Handler [WEAK]
|
||||||
|
EXPORT TCC0_Handler [WEAK]
|
||||||
|
EXPORT TCC1_Handler [WEAK]
|
||||||
|
EXPORT TCC2_Handler [WEAK]
|
||||||
|
EXPORT TC0_Handler [WEAK]
|
||||||
|
EXPORT TC1_Handler [WEAK]
|
||||||
|
EXPORT TC2_Handler [WEAK]
|
||||||
|
EXPORT TC3_Handler [WEAK]
|
||||||
|
EXPORT TC4_Handler [WEAK]
|
||||||
|
EXPORT ADC_Handler [WEAK]
|
||||||
|
EXPORT AC_Handler [WEAK]
|
||||||
|
EXPORT DAC_Handler [WEAK]
|
||||||
|
EXPORT PTC_Handler [WEAK]
|
||||||
|
EXPORT AES_Handler [WEAK]
|
||||||
|
EXPORT TRNG_Handler [WEAK]
|
||||||
|
EXPORT PICOP_Handler [WEAK]
|
||||||
|
|
||||||
|
SYSTEM_Handler
|
||||||
|
WDT_Handler
|
||||||
|
RTC_Handler
|
||||||
|
EIC_Handler
|
||||||
|
NVMCTRL_Handler
|
||||||
|
DMAC_Handler
|
||||||
|
USB_Handler
|
||||||
|
EVSYS_Handler
|
||||||
|
SERCOM0_Handler
|
||||||
|
SERCOM1_Handler
|
||||||
|
SERCOM2_Handler
|
||||||
|
SERCOM3_Handler
|
||||||
|
SERCOM4_Handler
|
||||||
|
SERCOM5_Handler
|
||||||
|
TCC0_Handler
|
||||||
|
TCC1_Handler
|
||||||
|
TCC2_Handler
|
||||||
|
TC0_Handler
|
||||||
|
TC1_Handler
|
||||||
|
TC2_Handler
|
||||||
|
TC3_Handler
|
||||||
|
TC4_Handler
|
||||||
|
ADC_Handler
|
||||||
|
AC_Handler
|
||||||
|
DAC_Handler
|
||||||
|
PTC_Handler
|
||||||
|
AES_Handler
|
||||||
|
TRNG_Handler
|
||||||
|
PICOP_Handler
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ALIGN
|
||||||
|
END
|
|
@ -0,0 +1,29 @@
|
||||||
|
;
|
||||||
|
SAML21J18A
|
||||||
|
;
|
||||||
|
256KB FLASH (0x40000) @ 0x000000000
|
||||||
|
;
|
||||||
|
2KB RAM (0x8000) @ 0x20000000
|
||||||
|
|
||||||
|
|
||||||
|
;
|
||||||
|
SAML21J18A: 256KB FLASH (0x40000) + 32KB RAM (0x8000)
|
||||||
|
LR_IROM1 0x00000000 0x40000 { ;
|
||||||
|
load region size_region
|
||||||
|
ER_IROM1 0x00000000 0x40000 { ;
|
||||||
|
load address = execution address
|
||||||
|
*.o (RESET, +First)
|
||||||
|
*(InRoot$$Sections)
|
||||||
|
.ANY (+RO)
|
||||||
|
}
|
||||||
|
|
||||||
|
;
|
||||||
|
[RAM] Vector table dynamic copy: 45 vectors * 4 bytes = (0xB4) - alignment
|
||||||
|
RW_IRAM1 (0x20000000+0xB4) (0x8000-0xB4)
|
||||||
|
{
|
||||||
|
;
|
||||||
|
RW data
|
||||||
|
.ANY (+RW +ZI)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,194 @@
|
||||||
|
;/**************************************************************************//**
|
||||||
|
; * @file startup_SAML21.s
|
||||||
|
; * @brief CMSIS Cortex-M4 Core Device Startup File for
|
||||||
|
; * Atmel SAML21 Device Series
|
||||||
|
; * @version V1.00
|
||||||
|
; * @date 10. February 2015
|
||||||
|
; *
|
||||||
|
; * @note
|
||||||
|
; * Copyright (C) 2015 ARM Limited. All rights reserved.
|
||||||
|
; *
|
||||||
|
; * @par
|
||||||
|
; * ARM Limited (ARM) is supplying this software for use with Cortex-M
|
||||||
|
; * processor based microcontrollers. This file can be freely distributed
|
||||||
|
; * within development tools that are supporting such ARM based processors.
|
||||||
|
; *
|
||||||
|
; * @par
|
||||||
|
; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
|
||||||
|
; * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
|
||||||
|
; * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
|
||||||
|
; * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
|
||||||
|
; * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
|
||||||
|
; *
|
||||||
|
; ******************************************************************************/
|
||||||
|
__initial_sp EQU 0x20008000 ;Top of RAM
|
||||||
|
|
||||||
|
PRESERVE8
|
||||||
|
THUMB
|
||||||
|
|
||||||
|
|
||||||
|
;Vector Table Mapped to Address 0 at Reset
|
||||||
|
|
||||||
|
AREA RESET, DATA, READONLY
|
||||||
|
EXPORT __Vectors
|
||||||
|
EXPORT __Vectors_End
|
||||||
|
EXPORT __Vectors_Size
|
||||||
|
|
||||||
|
__Vectors DCD __initial_sp ;Top of Stack
|
||||||
|
DCD Reset_Handler ;Reset Handler
|
||||||
|
DCD NMI_Handler ;NMI Handler
|
||||||
|
DCD HardFault_Handler ;Hard Fault Handler
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD SVC_Handler ;SVCall Handler
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD 0 ;Reserved
|
||||||
|
DCD PendSV_Handler ;PendSV Handler
|
||||||
|
DCD SysTick_Handler ;SysTick Handler
|
||||||
|
|
||||||
|
;External Interrupts
|
||||||
|
DCD SYSTEM_Handler ;0 Main Clock, Oscillators Control, 32k Oscillators Control, Peripheral Access Controller, Power Manager, Supply Controller, Trigger Allocator
|
||||||
|
DCD WDT_Handler ;1 Watchdog Timer
|
||||||
|
DCD RTC_Handler ;2 Real-Time Counter
|
||||||
|
DCD EIC_Handler ;3 External Interrupt Controller
|
||||||
|
DCD NVMCTRL_Handler ;4 Non-Volatile Memory Controller
|
||||||
|
DCD DMAC_Handler ;5 Direct Memory Access Controller
|
||||||
|
DCD USB_Handler ;6 Universal Serial Bus
|
||||||
|
DCD EVSYS_Handler ;7 Event System Interface
|
||||||
|
DCD SERCOM0_Handler ;8 Serial Communication Interface 0
|
||||||
|
DCD SERCOM1_Handler ;9 Serial Communication Interface 1
|
||||||
|
DCD SERCOM2_Handler ;10 Serial Communication Interface 2
|
||||||
|
DCD SERCOM3_Handler ;11 Serial Communication Interface 3
|
||||||
|
DCD SERCOM4_Handler ;12 Serial Communication Interface 4
|
||||||
|
DCD SERCOM5_Handler ;13 Serial Communication Interface 5
|
||||||
|
DCD TCC0_Handler ;14 Timer Counter Control 0
|
||||||
|
DCD TCC1_Handler ;15 Timer Counter Control 1
|
||||||
|
DCD TCC2_Handler ;16 Timer Counter Control 2
|
||||||
|
DCD TC0_Handler ;17 Basic Timer Counter 0
|
||||||
|
DCD TC1_Handler ;18 Basic Timer Counter 1
|
||||||
|
DCD TC2_Handler ;19 Basic Timer Counter 2
|
||||||
|
DCD TC3_Handler ;20 Basic Timer Counter 3
|
||||||
|
DCD TC4_Handler ;21 Basic Timer Counter 4
|
||||||
|
DCD ADC_Handler ;22 Analog Digital Converter
|
||||||
|
DCD AC_Handler ;23 Analog Comparators
|
||||||
|
DCD DAC_Handler ;24 Digital-to-Analog Converter
|
||||||
|
DCD PTC_Handler ;25 Peripheral Touch Controller
|
||||||
|
DCD AES_Handler ;26 Advanced Encryption Standard
|
||||||
|
DCD TRNG_Handler ;27 True Random Generator
|
||||||
|
DCD PICOP_Handler ;28 PicoProcessor
|
||||||
|
__Vectors_End
|
||||||
|
|
||||||
|
__Vectors_Size EQU __Vectors_End - __Vectors
|
||||||
|
|
||||||
|
AREA |.text|, CODE, READONLY
|
||||||
|
|
||||||
|
|
||||||
|
;Reset Handler
|
||||||
|
|
||||||
|
Reset_Handler PROC
|
||||||
|
EXPORT Reset_Handler [WEAK]
|
||||||
|
IMPORT SystemInit
|
||||||
|
IMPORT __main
|
||||||
|
LDR R0, =SystemInit
|
||||||
|
BLX R0
|
||||||
|
LDR R0, =__main
|
||||||
|
BX R0
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
|
||||||
|
;Dummy Exception Handlers (infinite loops which can be modified)
|
||||||
|
|
||||||
|
NMI_Handler PROC
|
||||||
|
EXPORT NMI_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
HardFault_Handler\
|
||||||
|
PROC
|
||||||
|
EXPORT HardFault_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
SVC_Handler PROC
|
||||||
|
EXPORT SVC_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
PendSV_Handler PROC
|
||||||
|
EXPORT PendSV_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
SysTick_Handler PROC
|
||||||
|
EXPORT SysTick_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
Default_Handler PROC
|
||||||
|
EXPORT SYSTEM_Handler [WEAK]
|
||||||
|
EXPORT WDT_Handler [WEAK]
|
||||||
|
EXPORT RTC_Handler [WEAK]
|
||||||
|
EXPORT EIC_Handler [WEAK]
|
||||||
|
EXPORT NVMCTRL_Handler [WEAK]
|
||||||
|
EXPORT DMAC_Handler [WEAK]
|
||||||
|
EXPORT USB_Handler [WEAK]
|
||||||
|
EXPORT EVSYS_Handler [WEAK]
|
||||||
|
EXPORT SERCOM0_Handler [WEAK]
|
||||||
|
EXPORT SERCOM1_Handler [WEAK]
|
||||||
|
EXPORT SERCOM2_Handler [WEAK]
|
||||||
|
EXPORT SERCOM3_Handler [WEAK]
|
||||||
|
EXPORT SERCOM4_Handler [WEAK]
|
||||||
|
EXPORT SERCOM5_Handler [WEAK]
|
||||||
|
EXPORT TCC0_Handler [WEAK]
|
||||||
|
EXPORT TCC1_Handler [WEAK]
|
||||||
|
EXPORT TCC2_Handler [WEAK]
|
||||||
|
EXPORT TC0_Handler [WEAK]
|
||||||
|
EXPORT TC1_Handler [WEAK]
|
||||||
|
EXPORT TC2_Handler [WEAK]
|
||||||
|
EXPORT TC3_Handler [WEAK]
|
||||||
|
EXPORT TC4_Handler [WEAK]
|
||||||
|
EXPORT ADC_Handler [WEAK]
|
||||||
|
EXPORT AC_Handler [WEAK]
|
||||||
|
EXPORT DAC_Handler [WEAK]
|
||||||
|
EXPORT PTC_Handler [WEAK]
|
||||||
|
EXPORT AES_Handler [WEAK]
|
||||||
|
EXPORT TRNG_Handler [WEAK]
|
||||||
|
EXPORT PICOP_Handler [WEAK]
|
||||||
|
|
||||||
|
SYSTEM_Handler
|
||||||
|
WDT_Handler
|
||||||
|
RTC_Handler
|
||||||
|
EIC_Handler
|
||||||
|
NVMCTRL_Handler
|
||||||
|
DMAC_Handler
|
||||||
|
USB_Handler
|
||||||
|
EVSYS_Handler
|
||||||
|
SERCOM0_Handler
|
||||||
|
SERCOM1_Handler
|
||||||
|
SERCOM2_Handler
|
||||||
|
SERCOM3_Handler
|
||||||
|
SERCOM4_Handler
|
||||||
|
SERCOM5_Handler
|
||||||
|
TCC0_Handler
|
||||||
|
TCC1_Handler
|
||||||
|
TCC2_Handler
|
||||||
|
TC0_Handler
|
||||||
|
TC1_Handler
|
||||||
|
TC2_Handler
|
||||||
|
TC3_Handler
|
||||||
|
TC4_Handler
|
||||||
|
ADC_Handler
|
||||||
|
AC_Handler
|
||||||
|
DAC_Handler
|
||||||
|
PTC_Handler
|
||||||
|
AES_Handler
|
||||||
|
TRNG_Handler
|
||||||
|
PICOP_Handler
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ALIGN
|
||||||
|
END
|
|
@ -0,0 +1,118 @@
|
||||||
|
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||||
|
OUTPUT_ARCH(arm)
|
||||||
|
SEARCH_DIR(.)
|
||||||
|
|
||||||
|
/* Memory Spaces Definitions */
|
||||||
|
MEMORY {
|
||||||
|
rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000
|
||||||
|
ram (rwx) : ORIGIN = 0x20000000 + 0xB4, LENGTH = 0x00008000 - 0xB4
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The stack size used by the application. NOTE: you need to adjust according to your application. */
|
||||||
|
STACK_SIZE = DEFINED(STACK_SIZE) ? STACK_SIZE : DEFINED(__stack_size__) ? __stack_size__ : 0x2000;
|
||||||
|
|
||||||
|
/* Section Definitions */
|
||||||
|
SECTIONS {
|
||||||
|
.text :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
_sfixed = .;
|
||||||
|
KEEP(*(.vectors .vectors.*))
|
||||||
|
*(.text .text.* .gnu.linkonce.t.*)
|
||||||
|
*(.glue_7t) *(.glue_7)
|
||||||
|
*(.rodata .rodata* .gnu.linkonce.r.*)
|
||||||
|
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
||||||
|
|
||||||
|
/* Support C constructors, and C destructors in both user code
|
||||||
|
and the C library. This also provides support for C++ code. */
|
||||||
|
. = ALIGN(4);
|
||||||
|
KEEP(*(.init))
|
||||||
|
. = ALIGN(4);
|
||||||
|
__preinit_array_start = .;
|
||||||
|
KEEP (*(.preinit_array))
|
||||||
|
__preinit_array_end = .;
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
__init_array_start = .;
|
||||||
|
KEEP (*(SORT(.init_array.*)))
|
||||||
|
KEEP (*(.init_array))
|
||||||
|
__init_array_end = .;
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
KEEP (*crtbegin.o(.ctors))
|
||||||
|
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
||||||
|
KEEP (*(SORT(.ctors.*)))
|
||||||
|
KEEP (*crtend.o(.ctors))
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
KEEP(*(.fini))
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
__fini_array_start = .;
|
||||||
|
KEEP (*(.fini_array))
|
||||||
|
KEEP (*(SORT(.fini_array.*)))
|
||||||
|
__fini_array_end = .;
|
||||||
|
|
||||||
|
KEEP (*crtbegin.o(.dtors))
|
||||||
|
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
||||||
|
KEEP (*(SORT(.dtors.*)))
|
||||||
|
KEEP (*crtend.o(.dtors))
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
_efixed = .; /* End of text section */
|
||||||
|
} > rom
|
||||||
|
|
||||||
|
/* .ARM.exidx is sorted, so has to go in its own output section. */
|
||||||
|
PROVIDE_HIDDEN (__exidx_start = .);
|
||||||
|
.ARM.exidx :
|
||||||
|
{
|
||||||
|
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||||
|
} > rom
|
||||||
|
PROVIDE_HIDDEN (__exidx_end = .);
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
_etext = .;
|
||||||
|
|
||||||
|
.relocate :
|
||||||
|
AT (_etext)
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
_srelocate = .;
|
||||||
|
*(.ramfunc .ramfunc.*);
|
||||||
|
*(.data .data.*);
|
||||||
|
. = ALIGN(4);
|
||||||
|
_erelocate = .;
|
||||||
|
} > ram
|
||||||
|
|
||||||
|
/* .bss section which is used for uninitialized data */
|
||||||
|
.bss (NOLOAD) :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
_sbss = . ;
|
||||||
|
_szero = .;
|
||||||
|
*(.bss .bss.*)
|
||||||
|
*(COMMON)
|
||||||
|
. = ALIGN(4);
|
||||||
|
_ebss = . ;
|
||||||
|
_ezero = .;
|
||||||
|
} > ram
|
||||||
|
|
||||||
|
.heap (NOLOAD) :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
__end__ = . ;
|
||||||
|
. = ORIGIN(ram) + LENGTH(ram) - STACK_SIZE;
|
||||||
|
} > ram
|
||||||
|
|
||||||
|
/* stack section */
|
||||||
|
.stack (NOLOAD):
|
||||||
|
{
|
||||||
|
. = ALIGN(8);
|
||||||
|
_sstack = .;
|
||||||
|
. = . + STACK_SIZE;
|
||||||
|
. = ALIGN(8);
|
||||||
|
_estack = .;
|
||||||
|
} > ram
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
}
|
|
@ -0,0 +1,281 @@
|
||||||
|
/**
|
||||||
|
* \file
|
||||||
|
*
|
||||||
|
* \brief gcc starttup file for SAML21
|
||||||
|
*
|
||||||
|
* Copyright (c) 2014-2015 Atmel Corporation. All rights reserved.
|
||||||
|
*
|
||||||
|
* \asf_license_start
|
||||||
|
*
|
||||||
|
* \page License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* 3. The name of Atmel may not be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* 4. This software may only be redistributed and used in connection with an
|
||||||
|
* Atmel microcontroller product.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||||
|
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* \asf_license_stop
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "saml21.h"
|
||||||
|
|
||||||
|
/* Initialize segments */
|
||||||
|
extern uint32_t _sfixed;
|
||||||
|
extern uint32_t _efixed;
|
||||||
|
extern uint32_t _etext;
|
||||||
|
extern uint32_t _srelocate;
|
||||||
|
extern uint32_t _erelocate;
|
||||||
|
extern uint32_t _szero;
|
||||||
|
extern uint32_t _ezero;
|
||||||
|
extern uint32_t _sstack;
|
||||||
|
extern uint32_t _estack;
|
||||||
|
|
||||||
|
/** \cond DOXYGEN_SHOULD_SKIP_THIS */
|
||||||
|
int main(void);
|
||||||
|
/** \endcond */
|
||||||
|
|
||||||
|
void __libc_init_array(void);
|
||||||
|
|
||||||
|
/* Default empty handler */
|
||||||
|
void Dummy_Handler(void);
|
||||||
|
|
||||||
|
/* Cortex-M0+ core handlers */
|
||||||
|
void NMI_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
void HardFault_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
void SVC_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
void PendSV_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
void SysTick_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
|
||||||
|
/* Peripherals handlers */
|
||||||
|
void SYSTEM_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler"))); /* MCLK, OSCCTRL, OSC32KCTRL, PAC, PM, SUPC, TAL */
|
||||||
|
void WDT_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
void RTC_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
void EIC_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
void NVMCTRL_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
void DMAC_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
#ifdef ID_USB
|
||||||
|
void USB_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
#endif
|
||||||
|
void EVSYS_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
void SERCOM0_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
void SERCOM1_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
void SERCOM2_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
void SERCOM3_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
#ifdef ID_SERCOM4
|
||||||
|
void SERCOM4_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
#endif
|
||||||
|
#ifdef ID_SERCOM5
|
||||||
|
void SERCOM5_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
#endif
|
||||||
|
void TCC0_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
void TCC1_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
void TCC2_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
void TC0_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
void TC1_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
#ifdef ID_TC2
|
||||||
|
void TC2_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
#endif
|
||||||
|
#ifdef ID_TC3
|
||||||
|
void TC3_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
#endif
|
||||||
|
void TC4_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
#ifdef ID_ADC
|
||||||
|
void ADC_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
#endif
|
||||||
|
#ifdef ID_AC
|
||||||
|
void AC_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
#endif
|
||||||
|
#ifdef ID_DAC
|
||||||
|
void DAC_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
#endif
|
||||||
|
#ifdef ID_PTC
|
||||||
|
void PTC_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
#endif
|
||||||
|
#ifdef ID_AES
|
||||||
|
void AES_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
#endif
|
||||||
|
#ifdef ID_TRNG
|
||||||
|
void TRNG_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
#endif
|
||||||
|
#ifdef ID_PICOP
|
||||||
|
void PICOP_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Exception Table */
|
||||||
|
__attribute__ ((section(".vectors")))
|
||||||
|
const DeviceVectors exception_table = {
|
||||||
|
|
||||||
|
/* Configure Initial Stack Pointer, using linker-generated symbols */
|
||||||
|
(void*) (&_estack),
|
||||||
|
|
||||||
|
(void*) Reset_Handler,
|
||||||
|
(void*) NMI_Handler,
|
||||||
|
(void*) HardFault_Handler,
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) SVC_Handler,
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) PendSV_Handler,
|
||||||
|
(void*) SysTick_Handler,
|
||||||
|
|
||||||
|
/* Configurable interrupts */
|
||||||
|
(void*) SYSTEM_Handler, /* 0 Main Clock, Oscillators Control, 32k Oscillators Control, Peripheral Access Controller, Power Manager, Supply Controller, Trigger Allocator */
|
||||||
|
(void*) WDT_Handler, /* 1 Watchdog Timer */
|
||||||
|
(void*) RTC_Handler, /* 2 Real-Time Counter */
|
||||||
|
(void*) EIC_Handler, /* 3 External Interrupt Controller */
|
||||||
|
(void*) NVMCTRL_Handler, /* 4 Non-Volatile Memory Controller */
|
||||||
|
(void*) DMAC_Handler, /* 5 Direct Memory Access Controller */
|
||||||
|
#ifdef ID_USB
|
||||||
|
(void*) USB_Handler, /* 6 Universal Serial Bus */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
#endif
|
||||||
|
(void*) EVSYS_Handler, /* 7 Event System Interface */
|
||||||
|
(void*) SERCOM0_Handler, /* 8 Serial Communication Interface 0 */
|
||||||
|
(void*) SERCOM1_Handler, /* 9 Serial Communication Interface 1 */
|
||||||
|
(void*) SERCOM2_Handler, /* 10 Serial Communication Interface 2 */
|
||||||
|
(void*) SERCOM3_Handler, /* 11 Serial Communication Interface 3 */
|
||||||
|
#ifdef ID_SERCOM4
|
||||||
|
(void*) SERCOM4_Handler, /* 12 Serial Communication Interface 4 */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
#endif
|
||||||
|
#ifdef ID_SERCOM5
|
||||||
|
(void*) SERCOM5_Handler, /* 13 Serial Communication Interface 5 */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
#endif
|
||||||
|
(void*) TCC0_Handler, /* 14 Timer Counter Control 0 */
|
||||||
|
(void*) TCC1_Handler, /* 15 Timer Counter Control 1 */
|
||||||
|
(void*) TCC2_Handler, /* 16 Timer Counter Control 2 */
|
||||||
|
(void*) TC0_Handler, /* 17 Basic Timer Counter 0 */
|
||||||
|
(void*) TC1_Handler, /* 18 Basic Timer Counter 1 */
|
||||||
|
#ifdef ID_TC2
|
||||||
|
(void*) TC2_Handler, /* 19 Basic Timer Counter 2 */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
#endif
|
||||||
|
#ifdef ID_TC3
|
||||||
|
(void*) TC3_Handler, /* 20 Basic Timer Counter 3 */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
#endif
|
||||||
|
(void*) TC4_Handler, /* 21 Basic Timer Counter 4 */
|
||||||
|
#ifdef ID_ADC
|
||||||
|
(void*) ADC_Handler, /* 22 Analog Digital Converter */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
#endif
|
||||||
|
#ifdef ID_AC
|
||||||
|
(void*) AC_Handler, /* 23 Analog Comparators */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
#endif
|
||||||
|
#ifdef ID_DAC
|
||||||
|
(void*) DAC_Handler, /* 24 Digital-to-Analog Converter */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
#endif
|
||||||
|
#ifdef ID_PTC
|
||||||
|
(void*) PTC_Handler, /* 25 Peripheral Touch Controller */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
#endif
|
||||||
|
#ifdef ID_AES
|
||||||
|
(void*) AES_Handler, /* 26 Advanced Encryption Standard */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
#endif
|
||||||
|
#ifdef ID_TRNG
|
||||||
|
(void*) TRNG_Handler, /* 27 True Random Generator */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
#endif
|
||||||
|
#ifdef ID_PICOP
|
||||||
|
(void*) PICOP_Handler /* 28 PicoProcessor */
|
||||||
|
#else
|
||||||
|
(void*) (0UL) /* Reserved */
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief This is the code that gets called on processor reset.
|
||||||
|
* To initialize the device, and call the main() routine.
|
||||||
|
*/
|
||||||
|
void Reset_Handler(void)
|
||||||
|
{
|
||||||
|
uint32_t *pSrc, *pDest;
|
||||||
|
|
||||||
|
/* Initialize the relocate segment */
|
||||||
|
pSrc = &_etext;
|
||||||
|
pDest = &_srelocate;
|
||||||
|
|
||||||
|
if (pSrc != pDest) {
|
||||||
|
for (; pDest < &_erelocate;) {
|
||||||
|
*pDest++ = *pSrc++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clear the zero segment */
|
||||||
|
for (pDest = &_szero; pDest < &_ezero;) {
|
||||||
|
*pDest++ = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the vector table base address */
|
||||||
|
pSrc = (uint32_t *) & _sfixed;
|
||||||
|
SCB->VTOR = ((uint32_t) pSrc & SCB_VTOR_TBLOFF_Msk);
|
||||||
|
|
||||||
|
/* Initialize the C library */
|
||||||
|
__libc_init_array();
|
||||||
|
|
||||||
|
/* Overwriting the default value of the NVMCTRL.CTRLB.MANW bit (errata reference 13134) */
|
||||||
|
NVMCTRL->CTRLB.bit.MANW = 1;
|
||||||
|
|
||||||
|
/* Branch to main function */
|
||||||
|
main();
|
||||||
|
|
||||||
|
/* Infinite loop */
|
||||||
|
while (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Default interrupt handler for unused IRQs.
|
||||||
|
*/
|
||||||
|
void Dummy_Handler(void)
|
||||||
|
{
|
||||||
|
while (1) {
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,261 @@
|
||||||
|
/**
|
||||||
|
* \file
|
||||||
|
*
|
||||||
|
* Copyright (c) 2014-2015 Atmel Corporation. All rights reserved.
|
||||||
|
*
|
||||||
|
* \asf_license_start
|
||||||
|
*
|
||||||
|
* \page License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* 3. The name of Atmel may not be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* 4. This software may only be redistributed and used in connection with an
|
||||||
|
* Atmel microcontroller product.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||||
|
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* \asf_license_stop
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "saml21.h"
|
||||||
|
|
||||||
|
typedef void (*intfunc) (void);
|
||||||
|
typedef union {
|
||||||
|
intfunc __fun;
|
||||||
|
void * __ptr;
|
||||||
|
} intvec_elem;
|
||||||
|
|
||||||
|
void __iar_program_start(void);
|
||||||
|
int __low_level_init(void);
|
||||||
|
|
||||||
|
/* Default empty handler */
|
||||||
|
void Dummy_Handler(void);
|
||||||
|
|
||||||
|
/* Cortex-M0+ core handlers */
|
||||||
|
#pragma weak NMI_Handler = Dummy_Handler
|
||||||
|
#pragma weak HardFault_Handler = Dummy_Handler
|
||||||
|
#pragma weak SVC_Handler = Dummy_Handler
|
||||||
|
#pragma weak PendSV_Handler = Dummy_Handler
|
||||||
|
#pragma weak SysTick_Handler = Dummy_Handler
|
||||||
|
|
||||||
|
/* Peripherals handlers */
|
||||||
|
#pragma weak SYSTEM_Handler = Dummy_Handler /* MCLK, OSCCTRL, OSC32KCTRL, PAC, PM, SUPC, TAL */
|
||||||
|
#pragma weak WDT_Handler = Dummy_Handler
|
||||||
|
#pragma weak RTC_Handler = Dummy_Handler
|
||||||
|
#pragma weak EIC_Handler = Dummy_Handler
|
||||||
|
#pragma weak NVMCTRL_Handler = Dummy_Handler
|
||||||
|
#pragma weak DMAC_Handler = Dummy_Handler
|
||||||
|
#ifdef ID_USB
|
||||||
|
#pragma weak USB_Handler = Dummy_Handler
|
||||||
|
#endif
|
||||||
|
#pragma weak EVSYS_Handler = Dummy_Handler
|
||||||
|
#pragma weak SERCOM0_Handler = Dummy_Handler
|
||||||
|
#pragma weak SERCOM1_Handler = Dummy_Handler
|
||||||
|
#pragma weak SERCOM2_Handler = Dummy_Handler
|
||||||
|
#pragma weak SERCOM3_Handler = Dummy_Handler
|
||||||
|
#ifdef ID_SERCOM4
|
||||||
|
#pragma weak SERCOM4_Handler = Dummy_Handler
|
||||||
|
#endif
|
||||||
|
#ifdef ID_SERCOM5
|
||||||
|
#pragma weak SERCOM5_Handler = Dummy_Handler
|
||||||
|
#endif
|
||||||
|
#pragma weak TCC0_Handler = Dummy_Handler
|
||||||
|
#pragma weak TCC1_Handler = Dummy_Handler
|
||||||
|
#pragma weak TCC2_Handler = Dummy_Handler
|
||||||
|
#pragma weak TC0_Handler = Dummy_Handler
|
||||||
|
#pragma weak TC1_Handler = Dummy_Handler
|
||||||
|
#ifdef ID_TC2
|
||||||
|
#pragma weak TC2_Handler = Dummy_Handler
|
||||||
|
#endif
|
||||||
|
#ifdef ID_TC3
|
||||||
|
#pragma weak TC3_Handler = Dummy_Handler
|
||||||
|
#endif
|
||||||
|
#pragma weak TC4_Handler = Dummy_Handler
|
||||||
|
#ifdef ID_ADC
|
||||||
|
#pragma weak ADC_Handler = Dummy_Handler
|
||||||
|
#endif
|
||||||
|
#ifdef ID_AC
|
||||||
|
#pragma weak AC_Handler = Dummy_Handler
|
||||||
|
#endif
|
||||||
|
#ifdef ID_DAC
|
||||||
|
#pragma weak DAC_Handler = Dummy_Handler
|
||||||
|
#endif
|
||||||
|
#ifdef ID_PTC
|
||||||
|
#pragma weak PTC_Handler = Dummy_Handler
|
||||||
|
#endif
|
||||||
|
#ifdef ID_AES
|
||||||
|
#pragma weak AES_Handler = Dummy_Handler
|
||||||
|
#endif
|
||||||
|
#ifdef ID_TRNG
|
||||||
|
#pragma weak TRNG_Handler = Dummy_Handler
|
||||||
|
#endif
|
||||||
|
#ifdef ID_PICOP
|
||||||
|
#pragma weak PICOP_Handler = Dummy_Handler
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Exception Table */
|
||||||
|
#pragma language = extended
|
||||||
|
#pragma segment = "CSTACK"
|
||||||
|
|
||||||
|
/* The name "__vector_table" has special meaning for C-SPY: */
|
||||||
|
/* it is where the SP start value is found, and the NVIC vector */
|
||||||
|
/* table register (VTOR) is initialized to this address if != 0 */
|
||||||
|
|
||||||
|
#pragma section = ".intvec"
|
||||||
|
#pragma location = ".intvec"
|
||||||
|
const DeviceVectors __vector_table[] = {
|
||||||
|
__sfe("CSTACK"),
|
||||||
|
(void*) __iar_program_start,
|
||||||
|
(void*) NMI_Handler,
|
||||||
|
(void*) HardFault_Handler,
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) SVC_Handler,
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) (0UL), /* Reserved */
|
||||||
|
(void*) PendSV_Handler,
|
||||||
|
(void*) SysTick_Handler,
|
||||||
|
|
||||||
|
/* Configurable interrupts */
|
||||||
|
(void*) SYSTEM_Handler, /* 0 Main Clock, Oscillators Control, 32k Oscillators Control, Peripheral Access Controller, Power Manager, Supply Controller, Trigger Allocator */
|
||||||
|
(void*) WDT_Handler, /* 1 Watchdog Timer */
|
||||||
|
(void*) RTC_Handler, /* 2 Real-Time Counter */
|
||||||
|
(void*) EIC_Handler, /* 3 External Interrupt Controller */
|
||||||
|
(void*) NVMCTRL_Handler, /* 4 Non-Volatile Memory Controller */
|
||||||
|
(void*) DMAC_Handler, /* 5 Direct Memory Access Controller */
|
||||||
|
#ifdef ID_USB
|
||||||
|
(void*) USB_Handler, /* 6 Universal Serial Bus */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved*/
|
||||||
|
#endif
|
||||||
|
(void*) EVSYS_Handler, /* 7 Event System Interface */
|
||||||
|
(void*) SERCOM0_Handler, /* 8 Serial Communication Interface 0 */
|
||||||
|
(void*) SERCOM1_Handler, /* 9 Serial Communication Interface 1 */
|
||||||
|
(void*) SERCOM2_Handler, /* 10 Serial Communication Interface 2 */
|
||||||
|
(void*) SERCOM3_Handler, /* 11 Serial Communication Interface 3 */
|
||||||
|
#ifdef ID_SERCOM4
|
||||||
|
(void*) SERCOM4_Handler, /* 12 Serial Communication Interface 4 */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved*/
|
||||||
|
#endif
|
||||||
|
#ifdef ID_SERCOM5
|
||||||
|
(void*) SERCOM5_Handler, /* 13 Serial Communication Interface 5 */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved*/
|
||||||
|
#endif
|
||||||
|
(void*) TCC0_Handler, /* 14 Timer Counter Control 0 */
|
||||||
|
(void*) TCC1_Handler, /* 15 Timer Counter Control 1 */
|
||||||
|
(void*) TCC2_Handler, /* 16 Timer Counter Control 2 */
|
||||||
|
(void*) TC0_Handler, /* 17 Basic Timer Counter 0 */
|
||||||
|
(void*) TC1_Handler, /* 18 Basic Timer Counter 1 */
|
||||||
|
#ifdef ID_TC2
|
||||||
|
(void*) TC2_Handler, /* 19 Basic Timer Counter 2 */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved*/
|
||||||
|
#endif
|
||||||
|
#ifdef ID_TC3
|
||||||
|
(void*) TC3_Handler, /* 20 Basic Timer Counter 3 */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved*/
|
||||||
|
#endif
|
||||||
|
(void*) TC4_Handler, /* 21 Basic Timer Counter 4 */
|
||||||
|
#ifdef ID_ADC
|
||||||
|
(void*) ADC_Handler, /* 22 Analog Digital Converter */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved*/
|
||||||
|
#endif
|
||||||
|
#ifdef ID_AC
|
||||||
|
(void*) AC_Handler, /* 23 Analog Comparators */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved*/
|
||||||
|
#endif
|
||||||
|
#ifdef ID_DAC
|
||||||
|
(void*) DAC_Handler, /* 24 Digital-to-Analog Converter */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved*/
|
||||||
|
#endif
|
||||||
|
#ifdef ID_PTC
|
||||||
|
(void*) PTC_Handler, /* 25 Peripheral Touch Controller */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved*/
|
||||||
|
#endif
|
||||||
|
#ifdef ID_AES
|
||||||
|
(void*) AES_Handler, /* 26 Advanced Encryption Standard */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved*/
|
||||||
|
#endif
|
||||||
|
#ifdef ID_TRNG
|
||||||
|
(void*) TRNG_Handler, /* 27 True Random Generator */
|
||||||
|
#else
|
||||||
|
(void*) (0UL), /* Reserved*/
|
||||||
|
#endif
|
||||||
|
#ifdef ID_PICOP
|
||||||
|
(void*) PICOP_Handler /* 28 PicoProcessor */
|
||||||
|
#else
|
||||||
|
(void*) (0UL) /* Reserved*/
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
/**------------------------------------------------------------------------------
|
||||||
|
* This is the code that gets called on processor reset. To initialize the
|
||||||
|
* device.
|
||||||
|
*------------------------------------------------------------------------------*/
|
||||||
|
int __low_level_init(void)
|
||||||
|
{
|
||||||
|
uint32_t *pSrc = __section_begin(".intvec");
|
||||||
|
|
||||||
|
SCB->VTOR = ((uint32_t) pSrc & SCB_VTOR_TBLOFF_Msk);
|
||||||
|
|
||||||
|
return 1; /* if return 0, the data sections will not be initialized */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**------------------------------------------------------------------------------
|
||||||
|
* This is the code that gets called on processor reset. To initialize the
|
||||||
|
* device.
|
||||||
|
*------------------------------------------------------------------------------*/
|
||||||
|
void Reset_Handler(void)
|
||||||
|
{
|
||||||
|
/* Overwriting the default value of the NVMCTRL.CTRLB.MANW bit (errata reference 13134) */
|
||||||
|
NVMCTRL->CTRLB.bit.MANW = 1;
|
||||||
|
|
||||||
|
__iar_program_start();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Default interrupt handler for unused IRQs.
|
||||||
|
*/
|
||||||
|
void Dummy_Handler(void)
|
||||||
|
{
|
||||||
|
while (1) {
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
/* mbed Microcontroller Library - CMSIS
|
||||||
|
* Copyright (C) 2009-2011 ARM Limited. All rights reserved.
|
||||||
|
*
|
||||||
|
* A generic CMSIS include header, pulling in samr21j18a specifics
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MBED_CMSIS_H
|
||||||
|
#define MBED_CMSIS_H
|
||||||
|
|
||||||
|
#include "saml21.h"
|
||||||
|
#include "cmsis_nvic.h"
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,51 @@
|
||||||
|
/* mbed Microcontroller Library
|
||||||
|
* CMSIS-style functionality to support dynamic vectors
|
||||||
|
*******************************************************************************
|
||||||
|
* Copyright (c) 2011 ARM Limited. All rights reserved.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* 3. Neither the name of ARM Limited nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MBED_CMSIS_NVIC_H
|
||||||
|
#define MBED_CMSIS_NVIC_H
|
||||||
|
|
||||||
|
#define NVIC_NUM_VECTORS (16 +29) // CORE + MCU Peripherals
|
||||||
|
#define NVIC_USER_IRQ_OFFSET 16
|
||||||
|
|
||||||
|
#include "cmsis.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector);
|
||||||
|
uint32_t NVIC_GetVector(IRQn_Type IRQn);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,41 @@
|
||||||
|
/* mbed Microcontroller Library
|
||||||
|
* Copyright (c) 2006-2015 ARM Limited
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <rt_misc.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
extern char Image$$RW_IRAM1$$ZI$$Limit[];
|
||||||
|
|
||||||
|
extern __value_in_regs struct __initial_stackheap __user_setup_stackheap(uint32_t R0, uint32_t R1, uint32_t R2, uint32_t R3)
|
||||||
|
{
|
||||||
|
uint32_t zi_limit = (uint32_t)Image$$RW_IRAM1$$ZI$$Limit;
|
||||||
|
uint32_t sp_limit = __current_sp();
|
||||||
|
|
||||||
|
zi_limit = (zi_limit + 7) & ~0x7; // ensure zi_limit is 8-byte aligned
|
||||||
|
|
||||||
|
struct __initial_stackheap r;
|
||||||
|
r.heap_base = zi_limit;
|
||||||
|
r.heap_limit = sp_limit;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -0,0 +1,41 @@
|
||||||
|
/* mbed Microcontroller Library
|
||||||
|
* Copyright (c) 2006-2015 ARM Limited
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <rt_misc.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
extern char Image$$RW_IRAM1$$ZI$$Limit[];
|
||||||
|
|
||||||
|
extern __value_in_regs struct __initial_stackheap __user_setup_stackheap(uint32_t R0, uint32_t R1, uint32_t R2, uint32_t R3)
|
||||||
|
{
|
||||||
|
uint32_t zi_limit = (uint32_t)Image$$RW_IRAM1$$ZI$$Limit;
|
||||||
|
uint32_t sp_limit = __current_sp();
|
||||||
|
|
||||||
|
zi_limit = (zi_limit + 7) & ~0x7; // ensure zi_limit is 8-byte aligned
|
||||||
|
|
||||||
|
struct __initial_stackheap r;
|
||||||
|
r.heap_base = zi_limit;
|
||||||
|
r.heap_limit = sp_limit;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -0,0 +1,58 @@
|
||||||
|
/* mbed Microcontroller Library
|
||||||
|
* CMSIS-style functionality to support dynamic vectors
|
||||||
|
*******************************************************************************
|
||||||
|
* Copyright (c) 2011 ARM Limited. All rights reserved.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* 3. Neither the name of ARM Limited nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*******************************************************************************
|
||||||
|
*/
|
||||||
|
#include "cmsis_nvic.h"
|
||||||
|
|
||||||
|
#define NVIC_RAM_VECTOR_ADDRESS (0x20000000) // Vectors positioned at start of RAM
|
||||||
|
//extern uint32_t _sdvectors;
|
||||||
|
#define NVIC_FLASH_VECTOR_ADDRESS (0x0) // Initial vector position in flash
|
||||||
|
|
||||||
|
void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
|
||||||
|
{
|
||||||
|
uint32_t *vectors = (uint32_t*)SCB->VTOR;
|
||||||
|
uint32_t i;
|
||||||
|
|
||||||
|
// Copy and switch to dynamic vectors if the first time called
|
||||||
|
if (SCB->VTOR == NVIC_FLASH_VECTOR_ADDRESS) {
|
||||||
|
uint32_t *old_vectors = vectors;
|
||||||
|
vectors = (uint32_t*)NVIC_RAM_VECTOR_ADDRESS;
|
||||||
|
for (i=0; i<NVIC_NUM_VECTORS; i++) {
|
||||||
|
vectors[i] = old_vectors[i];
|
||||||
|
}
|
||||||
|
SCB->VTOR = (uint32_t)NVIC_RAM_VECTOR_ADDRESS;
|
||||||
|
}
|
||||||
|
vectors[IRQn + 16] = vector;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t NVIC_GetVector(IRQn_Type IRQn)
|
||||||
|
{
|
||||||
|
uint32_t *vectors = (uint32_t*)SCB->VTOR;
|
||||||
|
return vectors[IRQn + 16];
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue