mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-17 05:32:55 +08:00
298 lines
8.8 KiB
ArmAsm
298 lines
8.8 KiB
ArmAsm
/**************************************************
|
|
*
|
|
* Part one of the system initialization code, contains low-level
|
|
* initialization, plain thumb variant.
|
|
*
|
|
* Copyright 2011 IAR Systems. All rights reserved.
|
|
*
|
|
* $Revision: 50291 $
|
|
*
|
|
**************************************************/
|
|
|
|
;
|
|
; The modules in this file are included in the libraries, and may be replaced
|
|
; by any user-defined modules that define the PUBLIC symbol _program_start or
|
|
; a user defined start symbol.
|
|
; To override the cstartup defined in the library, simply add your modified
|
|
; version to the workbench project.
|
|
;
|
|
; The vector table is normally located at address 0.
|
|
; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
|
|
; 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.
|
|
;
|
|
; Cortex-M version
|
|
;
|
|
|
|
|
|
MODULE ?cstartup
|
|
|
|
;; Forward declaration of sections.
|
|
SECTION CSTACK:DATA:NOROOT(3)
|
|
|
|
SECTION .intvec:CODE:NOROOT(2)
|
|
|
|
EXTERN __iar_program_start
|
|
PUBLIC __vector_table
|
|
PUBLIC __vector_table_0x1c
|
|
PUBLIC __Vectors
|
|
PUBLIC __Vectors_End
|
|
PUBLIC __Vectors_Size
|
|
|
|
DATA
|
|
|
|
__vector_table
|
|
DCD sfe(CSTACK)
|
|
DCD Reset_Handler
|
|
DCD NMI_Handler
|
|
DCD HardFault_Handler
|
|
DCD MemManage_Handler
|
|
DCD BusFault_Handler
|
|
DCD UsageFault_Handler
|
|
__vector_table_0x1c
|
|
DCD 0
|
|
DCD 0
|
|
DCD 0
|
|
DCD 0
|
|
DCD SVC_Handler
|
|
DCD DebugMon_Handler
|
|
DCD 0
|
|
DCD PendSV_Handler
|
|
DCD SysTick_Handler
|
|
|
|
; External Interrupts
|
|
DCD DAC_IRQHandler ; 16 D/A Converter
|
|
DCD M0CORE_IRQHandler ; 17 CortexM0
|
|
DCD DMA_IRQHandler ; 18 General Purpose DMA
|
|
DCD 0 ; 19 Reserved
|
|
DCD 0 ; 20 Reserved
|
|
DCD ETH_IRQHandler ; 21 Ethernet
|
|
DCD SDIO_IRQHandler ; 22 SD/MMC
|
|
DCD LCD_IRQHandler ; 23 LCD
|
|
DCD USB0_IRQHandler ; 24 USB0
|
|
DCD USB1_IRQHandler ; 25 USB1
|
|
DCD SCT_IRQHandler ; 26 State Configurable Timer
|
|
DCD RITIMER_IRQHandler ; 27 Repetitive Interrupt Timer
|
|
DCD TIMER0_IRQHandler ; 28 Timer0
|
|
DCD TIMER1_IRQHandler ; 29 Timer1
|
|
DCD TIMER2_IRQHandler ; 30 Timer2
|
|
DCD TIMER3_IRQHandler ; 31 Timer3
|
|
DCD MCPWM_IRQHandler ; 32 Motor Control PWM
|
|
DCD ADC0_IRQHandler ; 33 A/D Converter 0
|
|
DCD I2C0_IRQHandler ; 34 I2C0
|
|
DCD I2C1_IRQHandler ; 35 I2C1
|
|
DCD SPI_IRQHandler ; 36 Reserved
|
|
DCD ADC1_IRQHandler ; 37 A/D Converter 1
|
|
DCD SSP0_IRQHandler ; 38 SSP0
|
|
DCD SSP1_IRQHandler ; 39 SSP1
|
|
DCD USART0_IRQHandler ; 40 UART0
|
|
DCD UART1_IRQHandler ; 41 UART1
|
|
DCD UART2_IRQHandler ; 42 UART2
|
|
DCD UART3_IRQHandler ; 43 UART3
|
|
DCD I2S0_IRQHandler ; 44 I2S0
|
|
DCD I2S1_IRQHandler ; 45 I2S1
|
|
DCD SPIFI_IRQHandler ; 46 SPIFI
|
|
DCD SGPIO_IRQHandler ; 47 SGPIO
|
|
DCD GPIO0_IRQHandler ; 48 GPIO0
|
|
DCD GPIO1_IRQHandler ; 49 GPIO1
|
|
DCD GPIO2_IRQHandler ; 50 GPIO2
|
|
DCD GPIO3_IRQHandler ; 51 GPIO3
|
|
DCD GPIO4_IRQHandler ; 52 GPIO4
|
|
DCD GPIO5_IRQHandler ; 53 GPIO5
|
|
DCD GPIO6_IRQHandler ; 54 GPIO6
|
|
DCD GPIO7_IRQHandler ; 55 GPIO7
|
|
DCD GINT0_IRQHandler ; 56 GINT0
|
|
DCD GINT1_IRQHandler ; 57 GINT1
|
|
DCD EVENTROUTER_IRQHandler ; 58 Event Router
|
|
DCD C_CAN1_IRQHandler ; 59 CCAN1
|
|
DCD 0
|
|
DCD 0
|
|
DCD ATIMER_IRQHandler ; 62 Alarm Timer
|
|
DCD RTC_IRQHandler ; 63 RTC
|
|
DCD 0
|
|
DCD WWDT_IRQHandler ; 65 WWDT
|
|
DCD 0
|
|
DCD C_CAN0_IRQHandler ; 67 CCAN0
|
|
DCD QEI_IRQHandler ; 68 QEI
|
|
__Vectors_End
|
|
|
|
__Vectors EQU __vector_table
|
|
__Vectors_Size EQU __Vectors_End - __Vectors
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;
|
|
;; Default interrupt handlers.
|
|
;;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
THUMB
|
|
|
|
PUBWEAK Reset_Handler
|
|
SECTION .text:CODE:REORDER(2)
|
|
Reset_Handler
|
|
LDR R0, =__iar_program_start
|
|
BX R0
|
|
|
|
PUBWEAK NMI_Handler
|
|
PUBWEAK HardFault_Handler
|
|
PUBWEAK MemManage_Handler
|
|
PUBWEAK BusFault_Handler
|
|
PUBWEAK UsageFault_Handler
|
|
PUBWEAK SVC_Handler
|
|
PUBWEAK DebugMon_Handler
|
|
PUBWEAK PendSV_Handler
|
|
PUBWEAK SysTick_Handler
|
|
PUBWEAK DAC_IRQHandler
|
|
PUBWEAK M0CORE_IRQHandler
|
|
PUBWEAK DMA_IRQHandler
|
|
PUBWEAK ETH_IRQHandler
|
|
PUBWEAK SDIO_IRQHandler
|
|
PUBWEAK LCD_IRQHandler
|
|
PUBWEAK USB0_IRQHandler
|
|
PUBWEAK USB1_IRQHandler
|
|
PUBWEAK SCT_IRQHandler
|
|
PUBWEAK RITIMER_IRQHandler
|
|
PUBWEAK TIMER0_IRQHandler
|
|
PUBWEAK TIMER1_IRQHandler
|
|
PUBWEAK TIMER2_IRQHandler
|
|
PUBWEAK TIMER3_IRQHandler
|
|
PUBWEAK MCPWM_IRQHandler
|
|
PUBWEAK ADC0_IRQHandler
|
|
PUBWEAK I2C0_IRQHandler
|
|
PUBWEAK I2C1_IRQHandler
|
|
PUBWEAK SPI_IRQHandler
|
|
PUBWEAK ADC1_IRQHandler
|
|
PUBWEAK SSP0_IRQHandler
|
|
PUBWEAK SSP1_IRQHandler
|
|
PUBWEAK USART0_IRQHandler
|
|
PUBWEAK UART1_IRQHandler
|
|
PUBWEAK UART2_IRQHandler
|
|
PUBWEAK UART3_IRQHandler
|
|
PUBWEAK I2S0_IRQHandler
|
|
PUBWEAK I2S1_IRQHandler
|
|
PUBWEAK SPIFI_IRQHandler
|
|
PUBWEAK SGPIO_IRQHandler
|
|
PUBWEAK GPIO0_IRQHandler
|
|
PUBWEAK GPIO1_IRQHandler
|
|
PUBWEAK GPIO2_IRQHandler
|
|
PUBWEAK GPIO3_IRQHandler
|
|
PUBWEAK GPIO4_IRQHandler
|
|
PUBWEAK GPIO5_IRQHandler
|
|
PUBWEAK GPIO6_IRQHandler
|
|
PUBWEAK GPIO7_IRQHandler
|
|
PUBWEAK GINT0_IRQHandler
|
|
PUBWEAK GINT1_IRQHandler
|
|
PUBWEAK EVENTROUTER_IRQHandler
|
|
PUBWEAK C_CAN1_IRQHandler
|
|
PUBWEAK ATIMER_IRQHandler
|
|
PUBWEAK RTC_IRQHandler
|
|
PUBWEAK WWDT_IRQHandler
|
|
PUBWEAK C_CAN0_IRQHandler
|
|
PUBWEAK QEI_IRQHandler
|
|
SECTION .text:CODE:REORDER(1)
|
|
NMI_Handler
|
|
B NMI_Handler
|
|
SVC_Handler
|
|
B SVC_Handler
|
|
DebugMon_Handler
|
|
B DebugMon_Handler
|
|
PendSV_Handler
|
|
B PendSV_Handler
|
|
SysTick_Handler
|
|
B SysTick_Handler
|
|
HardFault_Handler
|
|
B HardFault_Handler
|
|
MemManage_Handler
|
|
B MemManage_Handler
|
|
BusFault_Handler
|
|
B BusFault_Handler
|
|
UsageFault_Handler
|
|
DAC_IRQHandler
|
|
M0CORE_IRQHandler
|
|
DMA_IRQHandler
|
|
ETH_IRQHandler
|
|
SDIO_IRQHandler
|
|
LCD_IRQHandler
|
|
USB0_IRQHandler
|
|
USB1_IRQHandler
|
|
SCT_IRQHandler
|
|
RITIMER_IRQHandler
|
|
TIMER0_IRQHandler
|
|
TIMER1_IRQHandler
|
|
TIMER2_IRQHandler
|
|
TIMER3_IRQHandler
|
|
MCPWM_IRQHandler
|
|
ADC0_IRQHandler
|
|
I2C0_IRQHandler
|
|
I2C1_IRQHandler
|
|
SPI_IRQHandler
|
|
ADC1_IRQHandler
|
|
SSP0_IRQHandler
|
|
SSP1_IRQHandler
|
|
USART0_IRQHandler
|
|
UART1_IRQHandler
|
|
UART2_IRQHandler
|
|
UART3_IRQHandler
|
|
I2S0_IRQHandler
|
|
I2S1_IRQHandler
|
|
SPIFI_IRQHandler
|
|
SGPIO_IRQHandler
|
|
GPIO0_IRQHandler
|
|
GPIO1_IRQHandler
|
|
GPIO2_IRQHandler
|
|
GPIO3_IRQHandler
|
|
GPIO4_IRQHandler
|
|
GPIO5_IRQHandler
|
|
GPIO6_IRQHandler
|
|
GPIO7_IRQHandler
|
|
GINT0_IRQHandler
|
|
GINT1_IRQHandler
|
|
EVENTROUTER_IRQHandler
|
|
C_CAN1_IRQHandler
|
|
ATIMER_IRQHandler
|
|
RTC_IRQHandler
|
|
WWDT_IRQHandler
|
|
C_CAN0_IRQHandler
|
|
QEI_IRQHandler
|
|
Default_IRQHandler
|
|
B Default_IRQHandler
|
|
|
|
|
|
THUMB
|
|
|
|
PUBLIC getPC
|
|
SECTION .text:CODE:REORDER(2)
|
|
getPC
|
|
MOV R0,LR
|
|
BX LR
|
|
|
|
|
|
/* CRP Section - not needed for flashless devices */
|
|
|
|
;;; SECTION .crp:CODE:ROOT(2)
|
|
;;; DATA
|
|
/* Code Read Protection
|
|
NO_ISP 0x4E697370 - Prevents sampling of pin PIO0_1 for entering ISP mode
|
|
CRP1 0x12345678 - Write to RAM command cannot access RAM below 0x10000300.
|
|
- Copy RAM to flash command can not write to Sector 0.
|
|
- Erase command can erase Sector 0 only when all sectors
|
|
are selected for erase.
|
|
- Compare command is disabled.
|
|
- Read Memory command is disabled.
|
|
CRP2 0x87654321 - Read Memory is disabled.
|
|
- Write to RAM is disabled.
|
|
- "Go" command is disabled.
|
|
- Copy RAM to flash is disabled.
|
|
- Compare is disabled.
|
|
CRP3 0x43218765 - Access to chip via the SWD pins is disabled. ISP entry
|
|
by pulling PIO0_1 LOW is disabled if a valid user code is
|
|
present in flash sector 0.
|
|
Caution: If CRP3 is selected, no future factory testing can be
|
|
performed on the device.
|
|
*/
|
|
;;; DCD 0xFFFFFFFF
|
|
;;;
|
|
|
|
END
|
|
|