220 lines
5.1 KiB
ArmAsm
220 lines
5.1 KiB
ArmAsm
/*
|
|
* This file is part of the Micro Python project, http://micropython.org/
|
|
*
|
|
* The MIT License (MIT)
|
|
*
|
|
* Copyright (c) 2015 Glenn Ruben Bakke
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*/
|
|
|
|
.syntax unified
|
|
.arch armv6-m
|
|
|
|
.global __Vectors
|
|
.global Default_Handler
|
|
|
|
.word _sidata
|
|
.word _sdata
|
|
.word _edata
|
|
.word _sbss
|
|
.word _ebss
|
|
|
|
/* Reset Handler */
|
|
|
|
.equ NRF_POWER_RAMON_ADDRESS, 0x40000524
|
|
.equ NRF_POWER_RAMONB_ADDRESS, 0x40000554
|
|
.equ NRF_POWER_RAMONx_RAMxON_ONMODE_Msk, 0x3
|
|
|
|
.text
|
|
.thumb
|
|
.thumb_func
|
|
.align 1
|
|
.globl Reset_Handler
|
|
.type Reset_Handler, %function
|
|
Reset_Handler:
|
|
.fnstart
|
|
|
|
movs R1, #NRF_POWER_RAMONx_RAMxON_ONMODE_Msk
|
|
ldr R0, =NRF_POWER_RAMON_ADDRESS
|
|
ldr R2, [R0]
|
|
orrs R2, R1
|
|
str R2, [R0]
|
|
|
|
ldr R0, =NRF_POWER_RAMONB_ADDRESS
|
|
ldr R2, [R0]
|
|
orrs R2, R1
|
|
str R2, [R0]
|
|
|
|
ldr r1, =_sidata
|
|
ldr r2, =_sdata
|
|
ldr r3, =_edata
|
|
|
|
subs r3, r2
|
|
ble LC0
|
|
|
|
LC1:
|
|
subs r3, 4
|
|
ldr r0, [r1,r3]
|
|
str r0, [r2,r3]
|
|
bgt LC1
|
|
|
|
LC0:
|
|
bl SystemInit
|
|
bl main
|
|
bx lr
|
|
|
|
.pool
|
|
.cantunwind
|
|
.fnend
|
|
.size Reset_Handler,.-Reset_Handler
|
|
|
|
/* Default Handler */
|
|
|
|
.section ".text"
|
|
.section .text.Default_Handler,"ax",%progbits
|
|
Default_Handler:
|
|
b .
|
|
.size Default_Handler, .-Default_Handler
|
|
|
|
|
|
/* Vector Table */
|
|
|
|
.section .isr_vector,"a",%progbits
|
|
.type __Vectors, %object
|
|
.size __Vectors, .-__Vectors
|
|
|
|
__Vectors:
|
|
.word _estack
|
|
.word Reset_Handler
|
|
.word NMI_Handler
|
|
.word HardFault_Handler
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word SVC_Handler
|
|
.word 0
|
|
.word 0
|
|
.word PendSV_Handler
|
|
.word SysTick_Handler
|
|
|
|
/* External Interrupts */
|
|
.word POWER_CLOCK_IRQHandler
|
|
.word RADIO_IRQHandler
|
|
.word UART0_IRQHandler
|
|
.word SPI0_TWI0_IRQHandler
|
|
.word SPI1_TWI1_IRQHandler
|
|
.word 0
|
|
.word GPIOTE_IRQHandler
|
|
.word ADC_IRQHandler
|
|
.word TIMER0_IRQHandler
|
|
.word TIMER1_IRQHandler
|
|
.word TIMER2_IRQHandler
|
|
.word RTC0_IRQHandler
|
|
.word TEMP_IRQHandler
|
|
.word RNG_IRQHandler
|
|
.word ECB_IRQHandler
|
|
.word CCM_AAR_IRQHandler
|
|
.word WDT_IRQHandler
|
|
.word RTC1_IRQHandler
|
|
.word QDEC_IRQHandler
|
|
.word LPCOMP_IRQHandler
|
|
.word SWI0_IRQHandler
|
|
.word SWI1_IRQHandler
|
|
.word SWI2_IRQHandler
|
|
.word SWI3_IRQHandler
|
|
.word SWI4_IRQHandler
|
|
.word SWI5_IRQHandler
|
|
|
|
/* Dummy Exception Handlers */
|
|
|
|
.weak NMI_Handler
|
|
.type NMI_Handler, %function
|
|
NMI_Handler:
|
|
b .
|
|
.size NMI_Handler, . - NMI_Handler
|
|
|
|
|
|
.weak HardFault_Handler
|
|
.type HardFault_Handler, %function
|
|
HardFault_Handler:
|
|
b .
|
|
.size HardFault_Handler, . - HardFault_Handler
|
|
|
|
|
|
.weak SVC_Handler
|
|
.type SVC_Handler, %function
|
|
SVC_Handler:
|
|
b .
|
|
.size SVC_Handler, . - SVC_Handler
|
|
|
|
|
|
.weak PendSV_Handler
|
|
.type PendSV_Handler, %function
|
|
PendSV_Handler:
|
|
b .
|
|
.size PendSV_Handler, . - PendSV_Handler
|
|
|
|
|
|
.weak SysTick_Handler
|
|
.type SysTick_Handler, %function
|
|
SysTick_Handler:
|
|
b .
|
|
.size SysTick_Handler, . - SysTick_Handler
|
|
|
|
|
|
/* IRQ Handlers */
|
|
|
|
.macro IRQ handler
|
|
.weak \handler
|
|
.set \handler, Default_Handler
|
|
.endm
|
|
|
|
IRQ POWER_CLOCK_IRQHandler
|
|
IRQ RADIO_IRQHandler
|
|
IRQ UART0_IRQHandler
|
|
IRQ SPI0_TWI0_IRQHandler
|
|
IRQ SPI1_TWI1_IRQHandler
|
|
IRQ GPIOTE_IRQHandler
|
|
IRQ ADC_IRQHandler
|
|
IRQ TIMER0_IRQHandler
|
|
IRQ TIMER1_IRQHandler
|
|
IRQ TIMER2_IRQHandler
|
|
IRQ RTC0_IRQHandler
|
|
IRQ TEMP_IRQHandler
|
|
IRQ RNG_IRQHandler
|
|
IRQ ECB_IRQHandler
|
|
IRQ CCM_AAR_IRQHandler
|
|
IRQ WDT_IRQHandler
|
|
IRQ RTC1_IRQHandler
|
|
IRQ QDEC_IRQHandler
|
|
IRQ LPCOMP_IRQHandler
|
|
IRQ SWI0_IRQHandler
|
|
IRQ SWI1_IRQHandler
|
|
IRQ SWI2_IRQHandler
|
|
IRQ SWI3_IRQHandler
|
|
IRQ SWI4_IRQHandler
|
|
IRQ SWI5_IRQHandler
|
|
|
|
.end
|