;******************** (C) COPYRIGHT 2011 STMicroelectronics
********************
;* File Name
:
startup_stm32f10x_hd.s
;* Author
: MCD Application Team
;* Version
: V3.5.0
;* Date
: 11-March-2011
;* Description
: STM32F10x High Density
Devices vector table for MDK-ARM
;*
toolchain.
;*
This module performs:
;*
- Set the initial SP
;*
- Set the initial PC ==
Reset_Handler
;*
- Set the vector table entries
with the exceptions ISR address
;*
- Configure the clock system
and also configure the external
;*
SRAM
mounted on STM3210E-EVAL board to be used as
data
;*
memory
(optional, to be enabled by user)
;*
- Branches to __main in the C
library (which eventually
;*
calls
main()).
;*
After Reset the CortexM3
processor is in Thread mode,
;*
priority is Privileged, and
the Stack is set to Main.
;* <<< Use Configuration Wizard in Context Menu
>>>
;*******************************************************************************
; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT
PROVIDING CUSTOMERS
; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER
FOR THEM TO SAVE TIME.
; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR
ANY DIRECT,
; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS
ARISING FROM THE
; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF
THE CODING
; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR
PRODUCTS.
;*******************************************************************************
; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs
; Stack Configuration
; Stack Size (in Bytes)
<0x0-0xFFFFFFFF:8>
;
Stack_Size
EQU
0x00000400 EQU是代码替换指令,是使0x00000400变的有意义易读
AREA
STACK, NOINIT, READWRITE,
ALIGN=3 //定义一个数据段 按8字节对齐
;AREA 伪指令用于定义一个代码段或数据段
NOINIT:指定此数据段仅仅保留了内存单元,而没有将各初始值写入内存单元,或者将各个内存单元值初始化为0
Stack_Mem
SPACE Stack_Size
为Stack_Mem 分配连续的0x00000400
字节空间,并且初始化为0
__initial_sp
_initial_sp
是个标签,代表当前指令的地址,由汇编器计算出的,代码里使用space分配了Stack_Size个内存单元后再在之后加上_initial_sp,后面会用DCD __initial_sp
在向量表0初始化栈顶地址,使用堆栈时栈顶地址减1恰好是分配的栈区间
; Heap Configuration
; Heap Size (in Bytes)
<0x0-0xFFFFFFFF:8>
;
Heap_Size
EQU
0x00000200
AREA
HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem
SPACE
Heap_Size
__heap_limit
PRESERVE8
THUMB
; Vector Table Mapped to Address 0 at Reset
AREA
RESET, DATA,
READONLY 定义一块数据段,只可读,段名字是RESET
EXPORT
__Vectors
EXPORT:在程序中声明一个全局的标号__Vectors,该标号可在其他的文件中引用
EXPORT
__Vectors_End
EXPORT
__Vectors_Size
__Vectors
DCD
__initial_sp
; Top of Stack
__Vectors是个标号
;该处物理地址值即为 __Vetors 标号所表示的值,
;该地址中存储__initial_sp所表示的地址值,
DCD (或 DCDU )伪指令用于分配一片连续的字存储单元并用伪指令中指定的表达式初始化。其中,表达式可以为程序标号或数字表达式。
DCD
Reset_Handler
; Reset
Handler
DCD
NMI_Handler
; NMI Handler
DCD
HardFault_Handler
; Hard Fault Handler
DCD
MemManage_Handler
; MPU Fault Handler
DCD
BusFault_Handler
; Bus Fault Handler
DCD
UsageFault_Handler
; Usage
Fault Handler
DCD
0
; Reserved
DCD
0
; Reserved
DCD
0
; Reserved
DCD
0
; Reserved
DCD
SVC_Handler
; SVCall Handler
DCD
DebugMon_Handler
; Debug Monitor Handler
DCD
0
; Reserved
DCD
PendSV_Handler
; PendSV Handler
DCD
SysTick_Handler
; SysTick Handler
; External Interrupts
DCD
WWDG_IRQHandler
; Window Watchdog
DCD
PVD_IRQHandler
; PVD through EXTI Line
detect
DCD
TAMPER_IRQHandler
; Tamper
DCD
RTC_IRQHandler
; RTC
DCD
FLASH_IRQHandler
; Flash
DCD
RCC_IRQHandler
; RCC
DCD
EXTI0_IRQHandler
; EXTI Line 0
DCD
EXTI1_IRQHandler
; EXTI Line 1
DCD
EXTI2_IRQHandler
; EXTI Line 2
DCD
EXTI3_IRQHandler
; EXTI Line 3
DCD
EXTI4_IRQHandler
; EXTI Line 4
DCD
DMA1_Channel1_IRQHandler ;
DMA1 Channel 1
DCD
DMA1_Channel2_IRQHandler ;
DMA1 Channel 2
DCD
DMA1_Channel3_IRQHandler ;
DMA1 Channel 3
DCD
DMA1_Channel4_IRQHandler ;
DMA1 Channel 4
DCD
DMA1_Channel5_IRQHandler ;
DMA1 Channel 5
DCD
DMA1_Channel6_IRQHandler ;
DMA1 Channel 6
DCD
DMA1_Channel7_IRQHandler ;
DMA1 Channel 7
DCD
ADC1_2_IRQHandler
; ADC1 & ADC2
DCD
USB_HP_CAN1_TX_IRQHandler ;
USB High Priority or CAN1 TX
DCD
USB_LP_CAN1_RX0_IRQHandler ; USB Low
Priority or CAN1 RX0
DCD
CAN1_RX1_IRQHandler
; CAN1
RX1
DCD
CAN1_SCE_IRQHandler
; CAN1
SCE
DCD
EXTI9_5_IRQHandler
; EXTI
Line 9..5
DCD
TIM1_BRK_IRQHandler
; TIM1
Break
DCD
TIM1_UP_IRQHandler
; TIM1
Update
DCD
TIM1_TRG_COM_IRQHandler
; TIM1 Trigger and Commutation
DCD
TIM1_CC_IRQHandler
; TIM1
Capture Compare
DCD
TIM2_IRQHandler
; TIM2
DCD
TIM3_IRQHandler
; TIM3
DCD
TIM4_IRQHandler
; TIM4
DCD
I2C1_EV_IRQHandler
; I2C1
Event
DCD
I2C1_ER_IRQHandler
; I2C1
Error
DCD
I2C2_EV_IRQHandler
; I2C2
Event
DCD
I2C2_ER_IRQHandler
; I2C2
Error
DCD
SPI1_IRQHandler
; SPI1
DCD
SPI2_IRQHandler
; SPI2
DCD
USART1_IRQHandler
; USART1
DCD
USART2_IRQHandler
; USART2
DCD
USART3_IRQHandler
; USART3
DCD
EXTI15_10_IRQHandler
; EXTI Line 15..10
DCD
RTCAlarm_IRQHandler
; RTC Alarm
through EXTI Line
DCD
USBWakeUp_IRQHandler
; USB Wakeup from
suspend
DCD
TIM8_BRK_IRQHandler
; TIM8
Break
DCD
TIM8_UP_IRQHandler
; TIM8
Update
DCD
TIM8_TRG_COM_IRQHandler
; TIM8 Trigger and Commutation
DCD
TIM8_CC_IRQHandler
; TIM8
Capture Compare
DCD
ADC3_IRQHandler
; ADC3
DCD
FSMC_IRQHandler
; FSMC
DCD
SDIO_IRQHandler
; SDIO
DCD
TIM5_IRQHandler
; TIM5
DCD
SPI3_IRQHandler
; SPI3
DCD
UART4_IRQHandler
; UART4
DCD
UART5_IRQHandler
; UART5
DCD
TIM6_IRQHandler
; TIM6
DCD
TIM7_IRQHandler
; TIM7
DCD
DMA2_Channel1_IRQHandler ;
DMA2 Channel1
DCD
DMA2_Channel2_IRQHandler ;
DMA2 Channel2
DCD
DMA2_Channel3_IRQHandler ;
DMA2 Channel3
DCD
DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 &
Channel5
__Vectors_End
__Vectors_Size EQU
__Vectors_End - __Vectors 计算出向量表的大小
AREA
|.text|, CODE, READONLY
//定义一个代码段,可读,段名字是.text 段名若以数字开头,则该段名需用"|"括起来,如|1_test|。
;定义只读数据段,实际上是在CODE区,如果在FLASH区起动,则 中断向量起始地址为0X8000000
;;CODE属性:用于定义代码段,默认为READONLY
; Reset handler
Reset_Handler
是一个标号,相当于一个函数名,
标记一个函数的开始;利用PROC、ENDP这一对伪指令把程序段分为若干个过程,使程序的结构加清晰
Reset_Handler PROC
EXPORT
Reset_Handler
[WEAK]
IMPORT
__main伪指令用于通知编译器要使用的标号在其他的源文件中定义
IMPORT
SystemInit
LDR
R0, =SystemInit
BLX
R0
LDR
R0, =__main
BX
R0
ENDP
; Dummy Exception Handlers (infinite loops which can be
modified)
上面这句英语的意思是空的中断处理函数,他们是无线循环,这些空的中断处理函数和在it.c里面的中断处理函数有什么区别呢????????????????????????
NMI_Handler PROC
EXPORT
NMI_Handler
[WEAK]
B
.
ENDP
HardFault_Handler\
PROC
EXPORT
HardFault_Handler
[WEAK]
B
.
ENDP
MemManage_Handler\
PROC
EXPORT
MemManage_Handler
[WEAK]
B
.
ENDP
BusFault_Handler\
PROC
EXPORT
BusFault_Handler
[WEAK]
B
.
ENDP
UsageFault_Handler\
PROC
EXPORT
UsageFault_Handler
[WEAK]
B
.
ENDP
SVC_Handler PROC
EXPORT
SVC_Handler
[WEAK]
B
.
ENDP
DebugMon_Handler\
PROC
EXPORT
DebugMon_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
WWDG_IRQHandler
[WEAK]
EXPORT
PVD_IRQHandler
[WEAK]
EXPORT
TAMPER_IRQHandler
[WEAK]
EXPORT
RTC_IRQHandler
[WEAK]
EXPORT
FLASH_IRQHandler
[WEAK]
EXPORT
RCC_IRQHandler
[WEAK]
EXPORT
EXTI0_IRQHandler
[WEAK]
EXPORT
EXTI1_IRQHandler
[WEAK]
EXPORT
EXTI2_IRQHandler
[WEAK]
EXPORT
EXTI3_IRQHandler
[WEAK]
EXPORT
EXTI4_IRQHandler
[WEAK]
EXPORT
DMA1_Channel1_IRQHandler
[WEAK]
EXPORT
DMA1_Channel2_IRQHandler
[WEAK]
EXPORT
DMA1_Channel3_IRQHandler
[WEAK]
EXPORT
DMA1_Channel4_IRQHandler
[WEAK]
EXPORT
DMA1_Channel5_IRQHandler
[WEAK]
EXPORT
DMA1_Channel6_IRQHandler
[WEAK]
EXPORT
DMA1_Channel7_IRQHandler
[WEAK]
EXPORT
ADC1_2_IRQHandler
[WEAK]
EXPORT
USB_HP_CAN1_TX_IRQHandler
[WEAK]
EXPORT
USB_LP_CAN1_RX0_IRQHandler [WEAK]
EXPORT
CAN1_RX1_IRQHandler
[WEAK]
EXPORT
CAN1_SCE_IRQHandler
[WEAK]
EXPORT
EXTI9_5_IRQHandler
[WEAK]
EXPORT
TIM1_BRK_IRQHandler
[WEAK]
EXPORT
TIM1_UP_IRQHandler
[WEAK]
EXPORT
TIM1_TRG_COM_IRQHandler
[WEAK]
EXPORT
TIM1_CC_IRQHandler
[WEAK]
EXPORT
TIM2_IRQHandler
[WEAK]
EXPORT
TIM3_IRQHandler
[WEAK]
EXPORT
TIM4_IRQHandler
[WEAK]
EXPORT
I2C1_EV_IRQHandler
[WEAK]
EXPORT
I2C1_ER_IRQHandler
[WEAK]
EXPORT
I2C2_EV_IRQHandler
[WEAK]
EXPORT
I2C2_ER_IRQHandler
[WEAK]
EXPORT
SPI1_IRQHandler
[WEAK]
EXPORT
SPI2_IRQHandler
[WEAK]
EXPORT
USART1_IRQHandler
[WEAK]
EXPORT
USART2_IRQHandler
[WEAK]
EXPORT
USART3_IRQHandler
[WEAK]
EXPORT
EXTI15_10_IRQHandler
[WEAK]
EXPORT
RTCAlarm_IRQHandler
[WEAK]
EXPORT
USBWakeUp_IRQHandler
[WEAK]
EXPORT
TIM8_BRK_IRQHandler
[WEAK]
EXPORT
TIM8_UP_IRQHandler
[WEAK]
EXPORT
TIM8_TRG_COM_IRQHandler
[WEAK]
EXPORT
TIM8_CC_IRQHandler
[WEAK]
EXPORT
ADC3_IRQHandler
[WEAK]
EXPORT
FSMC_IRQHandler
[WEAK]
EXPORT
SDIO_IRQHandler
[WEAK]
EXPORT
TIM5_IRQHandler
[WEAK]
EXPORT
SPI3_IRQHandler
[WEAK]
EXPORT
UART4_IRQHandler
[WEAK]
EXPORT
UART5_IRQHandler
[WEAK]
EXPORT
TIM6_IRQHandler
[WEAK]
EXPORT
TIM7_IRQHandler
[WEAK]
EXPORT
DMA2_Channel1_IRQHandler
[WEAK]
EXPORT
DMA2_Channel2_IRQHandler
[WEAK]
EXPORT
DMA2_Channel3_IRQHandler
[WEAK]
EXPORT
DMA2_Channel4_5_IRQHandler [WEAK]
WWDG_IRQHandler
PVD_IRQHandler
TAMPER_IRQHandler
RTC_IRQHandler
FLASH_IRQHandler
RCC_IRQHandler
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
DMA1_Channel1_IRQHandler
DMA1_Channel2_IRQHandler
DMA1_Channel3_IRQHandler
DMA1_Channel4_IRQHandler
DMA1_Channel5_IRQHandler
DMA1_Channel6_IRQHandler
DMA1_Channel7_IRQHandler
ADC1_2_IRQHandler
USB_HP_CAN1_TX_IRQHandler
USB_LP_CAN1_RX0_IRQHandler
CAN1_RX1_IRQHandler
CAN1_SCE_IRQHandler
EXTI9_5_IRQHandler
TIM1_BRK_IRQHandler
TIM1_UP_IRQHandler
TIM1_TRG_COM_IRQHandler
TIM1_CC_IRQHandler
TIM2_IRQHandler
TIM3_IRQHandler
TIM4_IRQHandler
I2C1_EV_IRQHandler
I2C1_ER_IRQHandler
I2C2_EV_IRQHandler
I2C2_ER_IRQHandler
SPI1_IRQHandler
SPI2_IRQHandler
USART1_IRQHandler
USART2_IRQHandler
USART3_IRQHandler
EXTI15_10_IRQHandler
RTCAlarm_IRQHandler
USBWakeUp_IRQHandler
TIM8_BRK_IRQHandler
TIM8_UP_IRQHandler
TIM8_TRG_COM_IRQHandler
TIM8_CC_IRQHandler
ADC3_IRQHandler
FSMC_IRQHandler
SDIO_IRQHandler
TIM5_IRQHandler
SPI3_IRQHandler
UART4_IRQHandler
UART5_IRQHandler
TIM6_IRQHandler
TIM7_IRQHandler
DMA2_Channel1_IRQHandler
DMA2_Channel2_IRQHandler
DMA2_Channel3_IRQHandler
DMA2_Channel4_5_IRQHandler
B
.
ENDP
ALIGN
;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************
IF
:DEF:__MICROLIB 判断是否使用DEF:__MICROLIB(micro lib)
EXPORT
__initial_sp
EXPORT
__heap_base
EXPORT
__heap_limit
ELSE
IMPORT
__use_two_region_memory 定义全局标号__use_two_region_memory
EXPORT
__user_initial_stackheap声明全局标号__user_initial_stackheap,这样外程序也可调用此标号
__user_initial_stackheap
LDR
R0, =
Heap_Mem
LDR
R1, =(Stack_Mem +
Stack_Size)
LDR
R2, = (Heap_Mem +
Heap_Size)
LDR
R3, = Stack_Mem
BX
LR
ALIGN
ENDIF
END
;******************* (C) COPYRIGHT 2011 STMicroelectronics
*****END OF FILE***** |