




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、* (C) COPYRIGHT 2009 STMicroelectronics *;* File Name : startup_stm32f10x_cl.s;* Author : MCD Application
2、0;Team;* Version : V3.1.0;* Date : 06/19/2009;* Description : S
3、TM32F10x Connectivity line devices vector table for RVMDK * toolchain. *
4、0; This module performs:;* - Set the initial SP;* &
5、#160; - Set the initial PC = Reset_Handler;*
6、; - Set the vector table entries with the exceptions ISR address;* - Branches to _main&
7、#160;in the C library (which eventually;* calls main().;*
8、0; After Reset the CortexM3 processor is in Thread mode,;* priority
9、60;is Privileged, and the Stack is set to Main.;* <<< Use Configuration Wizard in Context Menu >>> *; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE
10、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 LIAB
11、LE 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
12、160;CODING; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.;*; Amount of memory (in bytes) allocated for Stack; Tailor this value to your application needs; <h&g
13、t; Stack Configuration; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> </h> 首先对栈和堆的大小进行定义,并在代码区的起始处建立中断向量表,其第一个表项是栈; 顶地址,第二个表项是复位中断服务入口地址。然后在复位中断服务程序中跳转C/C+标; 准实时库的_main函数。假设STM32被设置为从内部FLASH启动中断向量表起始地位为0x8000000
14、,; 则栈顶地址存放于0x8000000处,而复位中断服务入口地址存放于0x8000004处。当STM32遇; 到复位信号后,则从0x80000004处取出复位中断服务入口地址继而执行复位中断服务程序,; 然后跳转_main函数,最后来到C的世界。 DCD指令:作用是开辟一段空间,其意义等价于C语言中的地址符“&”。开始建立的中断向量; 表则类似于使用C语.其每一个成员都是一个函数指针,分别指向各个中断服务函数;伪指令AREA,表示开辟一段大小为Stack_Size的内存空间作为栈,段名是STACK,可读可写。;NOINIT
15、:指定此数据段仅仅保留了内存单元,而没有将各初始值写入内存单元,或者将各个内存单元值初始化为0;常见的数据定义伪指令有如下几种:; DCB 用于分配一片连续的字节存储单元并用指定的数据初始化。; DCW (DCWU) 用于分配一片连续的半字存储单元并用指定的数据初始化。; DCD (DCDU) 用于分配一片连续的字存储单元并用指定的数据初始化。; DCFD (DCFDU)用于为双精度的浮点数分配一片连续的字存储单元并用指 定的数据初始化。; DCFS D
16、CFSU) 用于为单精度的浮点数分配一片连续的字存储单元并用指 定的数据初始化。; DCQ DCQU) 用于分配一片以 8 字节为单位的连续的存储单元并用指定 的数据初始化。; SPACE 用于分配一片连续的存储单元; MAP 用于定义一个结构化的内存表首地址; FIELD 用于定义一个结构化的内存表的数据域;EXPORT伪指令用于在程序中声明一个全局的标号,该标号可在其他的文件中引用。EXPORT可用GLOBAL代替。标号在程序中区分大小写,
17、WEAK选项声明其他的同名标号优先于该标号被引用。;启动代码作用一般是:;1)堆和栈的初始化;;2)向量表定义;;3)地址重映射及中断向量表的转移;;4)设置系统时钟频率;;5)中断寄存器的初始化;;6)进入C应用程序。;1)堆和栈的初始化Stack_Size EQU 0x00000400 ;栈区(stack) 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈 SPACE用来分配一片连续
18、的存储区域并初始化为0. AREA STACK, NOINIT, READWRITE, ALIGN=3 AREA 伪指令用于定义一个代码段或数据,;定义栈,可初始为0,8字节对齐2*2*2,2的3次方 NOINIT:指定此数据段仅仅保留了内存单
19、元, READWRITE属性:指定本段为可读可写,数据段的默认属性为READWRITE。 STACK 段名 ALIGN属性:使用方式为ALIGN 表达式。在默认时,ELF(可执行连接文件)的代码段和数据段是按字对齐的,表达式的取值范围为031,相应的对齐方式为2表达式次方。Stack_Mem SPACE Stack_Size ;分配0x400个连续字节,并初始
20、化为0_initial_sp 标号_initial_sp,表示栈空间顶地址。 ;汇编代码地址标号; <h> Heap Configuration; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> </h>Heap_Size EQU
21、160; 0x00000200 ;堆区(heap) 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表 AREA HEAP, NOINIT, READWRITE, ALIGN=3
22、60; ALIGN用来指定对齐方式, 8字节对齐_heap_base 表示堆空间起始地址Heap_Mem SPACE Heap_Size_heap_limit 表示堆空间结束地址 PRESE
23、RVE8 ;PRESERVE8 指令指定当前文件保持堆栈八字节对齐 THUMB ; 告诉汇编器下面是32位的Thumb指令,如果需要汇编器将插入位以保证对齐;2)中断向量表定义; Vector Table Mapped to Address 0 at Reset 实际上是在CODE区(
24、假设STM32从FLASH启动,则此中断向量表起始地址即为0x8000000) AREA RESET, DATA, READONLY ;定义一块数据段,只可读,段名字是RESET;DATA属性:用于定义数据段,默认为READWRITE。指定本段为可读可写
25、60; EXPORT _Vectors EXPORT:在程序中声明一个全局的标号_Vectors,该标号可在其他的文件中引用 EXPORT _Vectors_End ;在程序中声明一个全局的标号_Vectors_End
26、60; EXPORT _Vectors_Size ;在程序中声明一个全局的标号_Vectors_Size_Vectors DCD _initial_sp
27、 Top of Stack 第一个表项是栈顶地址;该处物理地址值即为 _Vetors 标号所表示的值,
28、160; ;该地址中存储_initial_sp所表示的地址值,;大小为一个字(32bit) DCD Reset_Handler
29、; Reset Handler 第二个表项是复位中断服务入口地址 DCD NMI_Handler NMI Ha
30、ndler 不可屏蔽中断? DCD HardFault_Handler Hard Fault Handler 硬件错误处理
31、; DCD MemManage_Handler MPU Fault Handler 存储器错误处理
32、;DCD BusFault_Handler Bus Fault Handler 总线错误处理 DCD UsageFault
33、_Handler Usage Fault Handler 用法错误处理 DCD 0
34、 Reserved 这种形式就是保留地址,不给任何标号分配 DCD 0
35、; Reserved DCD 0
36、; Reserved DCD 0
37、; Reserved DCD SVC_Handler &
38、#160; SVCall Handler 执行系统服务调用指令(SVC)引发的异常 DCD DebugMon_Handler De
39、bug Monitor Handler 调试监视器(断点,数据观察点,或者是外部调试请求 DCD 0
40、60; Reserved DCD PendSV_Handler PendSV Handler
41、为系统设备而设的“可悬挂请求” (pendable request) DCD SysTick_Handler SysTick Handler 系统滴答定时器
42、 External Interrupts 外设中断 DCD WWDG_IRQHandler &
43、#160; Window Watchdog 窗口看门狗 DCD PVD_IRQHandler
44、 PVD through EXTI Line detect 电源电压检测(PVD)中断 DCD TAMPER_IRQHandler Tamper
45、160; DCD RTC_IRQHandler RTC
46、 DCD FLASH_IRQHandler Flash DCD RCC_IRQHandler &
47、#160; RCC DCD EXTI0_IRQHandler EXT
48、I Line 0 DCD EXTI1_IRQHandler EXTI Line 1
49、160; DCD EXTI2_IRQHandler EXTI Line 2 DCD &
50、#160; EXTI3_IRQHandler EXTI Line 3 DCD EXTI4_IRQHandler
51、; EXTI Line 4 DCD DMA1_Channel1_IRQHandler DMA1 Channel 1
52、; DCD DMA1_Channel2_IRQHandler DMA1 Channel 2 DCD
53、;DMA1_Channel3_IRQHandler DMA1 Channel 3 DCD DMA1_Channel4_IRQHandler DMA1 Channel 4
54、160; DCD DMA1_Channel5_IRQHandler DMA1 Channel 5 DCD
55、160;DMA1_Channel6_IRQHandler DMA1 Channel 6 DCD DMA1_Channel7_IRQHandler DMA1 Channel 7
56、; DCD ADC1_2_IRQHandler ADC1 and ADC2
57、0; DCD CAN1_TX_IRQHandler CAN1 TX DCD CAN1_RX0_IRQHandler
58、60; CAN1 RX0 DCD CAN1_RX1_IRQHandler CAN1 RX1
59、60; DCD CAN1_SCE_IRQHandler CAN1 SCE DCD &
60、#160;EXTI9_5_IRQHandler EXTI Line 9.5 DCD TIM1_BRK_IRQHandler
61、0; TIM1 Break DCD TIM1_UP_IRQHandler TIM1 Update
62、 DCD TIM1_TRG_COM_IRQHandler TIM1 Trigger and Commutation DCD
63、TIM1_CC_IRQHandler TIM1 Capture Compare DCD TIM2_IRQHandler
64、 TIM2 DCD TIM3_IRQHandler TIM3
65、0; DCD TIM4_IRQHandler TIM4 DCD
66、60; I2C1_EV_IRQHandler I2C1 Event DCD I2C1_ER_IRQHandler
67、60; I2C1 Error DCD I2C2_EV_IRQHandler I2C2 Event
68、 DCD I2C2_ER_IRQHandler I2C1 Error DCD
69、60;SPI1_IRQHandler SPI1 DCD SPI2_IRQHandler
70、160; SPI2 DCD USART1_IRQHandler USART1
71、160; DCD USART2_IRQHandler USART2 DCD USART3_IR
72、QHandler USART3 DCD EXTI15_10_IRQHandler EXTI Line 15.
73、10 DCD RTCAlarm_IRQHandler RTC alarm through EXTI line &
74、#160; DCD OTG_FS_WKUP_IRQHandler USB OTG FS Wakeup through EXTI line D
75、CD 0 Reserved D
76、CD 0 Reserved D
77、CD 0 Reserved D
78、CD 0 Reserved D
79、CD 0 Reserved D
80、CD 0 Reserved D
81、CD 0 Reserved D
82、CD TIM5_IRQHandler TIM5 DCD SPI3_IRQHandler
83、60; SPI3 DCD UART4_IRQHandler UART4
84、; DCD UART5_IRQHandler UART5 DCD
85、160; TIM6_IRQHandler TIM6 DCD TIM7_IRQHandler &
86、#160; TIM7 DCD DMA2_Channel1_IRQHandler DMA2 Channel1
87、 DCD DMA2_Channel2_IRQHandler DMA2 Channel2 DCD DMA2_Channel3_IRQHandler
88、 DMA2 Channel3 DCD DMA2_Channel4_IRQHandler DMA2 Channel4
89、60; DCD DMA2_Channel5_IRQHandler DMA2 Channel5 DCD ETH_IRQHandler &
90、#160; Ethernet DCD ETH_WKUP_IRQHandler Ethernet Wakeup through
91、0;EXTI line DCD CAN2_TX_IRQHandler CAN2 TX
92、; DCD CAN2_RX0_IRQHandler CAN2 RX0 DCD CAN2_RX1_IRQHandler
93、160; CAN2 RX1 DCD CAN2_SCE_IRQHandler CAN2 SCE
94、160; DCD OTG_FS_IRQHandler USB OTG FS_Vectors_End 结束_Vectors_Size EQU _Vectors_End
95、60;- _Vectors 得到向量表的大小,304个字节也就是0x130个字节;3)地址重映射及中断向量表的转移; AREA |.text|, CODE, READONLY 定义一个代码段,可读,段名字是.text 段名若以数字开头,则该段名需用"|&q
96、uot;括起来,如|1_test|。;定义只读数据段,实际上是在CODE区,如果在FLASH区起动,则 中断向量起始地址为0X8000000;;CODE属性:用于定义代码段,默认为READONLY; Reset handler routineReset_Handler PROC ;;标记一个函数的开始;利用PROC、ENDP这一对伪指令把程序段分为若干个过程,使程序的结构加清晰 &
97、#160; EXPORT Reset_Handler WEAK 在外部没有定义该符号时导出该符号Reset_Handler EXPORT伪指令用于在程序中声明一个全局的标号 IMPORT
98、160;_main IMPORT:伪指令用于通知编译器要使用的标号在其他的源文件中定义 LDR R0, =_main ;_main为运行时库提供的函数;完成堆栈,堆的初始化等工作,会调用下面定义的_user_initial_stackheap
99、60; BX R0 跳到_main,进入C的世界 ENDP; Dummy Exception H
100、andlers (infinite loops which can be modified);虚拟异常处理器(无限循环可以修改了)NMI_Handler PROC ;PROC表示汇编函数的开始 EXPORT NMI_Handler
101、160; WEAK WEAK声明其他的同名标号优先于该标号被引用,就是说如果外面声明了的话, B . 会调用外面的 &
102、#160; ENDPHardFault_Handler PROC PROC表示汇编函数的开始
103、0; EXPORT HardFault_Handler WEAK 换行的意思 B .
104、 ENDPMemManage_Handler PROC ;PROC表示汇编函数的开始
105、160;EXPORT MemManage_Handler WEAK B .
106、60; ENDPBusFault_Handler PROC PROC表示汇编函数的开始 EXPORT B
107、usFault_Handler WEAK B .
108、60; ENDPUsageFault_Handler PROC EXPORT UsageFault_Handler &
109、#160; WEAK B . ENDPSVC_Handler
110、0; PROC PROC表示汇编函数的开始 EXPORT SVC_Handler WEAK &
111、#160; B . ENDPDebugMon_Handler
112、60; PROC ;PROC表示汇编函数的开始 EXPORT DebugMon_Handler WEAK
113、 B . ENDPPendSV_Handler PROC
114、 EXPORT PendSV_Handler WEAK B .
115、0; ENDPSysTick_Handler PROC PROC表示汇编函数的开始 EXPORT SysTick_Handler
116、 WEAK B . ENDPDefault_Handler PROC &
117、#160; EXPORT WWDG_IRQHandler WEAK EXPORT
118、 PVD_IRQHandler WEAK EXPORT TAMPER_IRQHandler WEAK
119、60; EXPORT RTC_IRQHandler WEAK
120、60;EXPORT FLASH_IRQHandler WEAK EXPORT RCC_IRQHandler
121、; WEAK EXPORT EXTI0_IRQHandler WEAK
122、; EXPORT EXTI1_IRQHandler WEAK EXPORT EXTI2_IRQHandler
123、; WEAK EXPORT EXTI3_IRQHandler WEAK
124、; EXPORT EXTI4_IRQHandler WEAK EXPORT DMA1_Channel1_IRQHandler WEAK
125、; EXPORT DMA1_Channel2_IRQHandler WEAK EXPORT DMA1_Channel3_IRQHandler WEAK
126、60; EXPORT DMA1_Channel4_IRQHandler WEAK EXPORT DMA1_Channel5_IRQHandler
127、; WEAK EXPORT DMA1_Channel6_IRQHandler WEAK EXPORT DMA1_Chan
128、nel7_IRQHandler WEAK EXPORT ADC1_2_IRQHandler WEAK
129、160; EXPORT CAN1_TX_IRQHandler WEAK EXPORT CAN1_RX0_IRQHandler
130、60;WEAK EXPORT CAN1_RX1_IRQHandler WEAK EXPORT
131、 CAN1_SCE_IRQHandler WEAK EXPORT EXTI9_5_IRQHandler WEAK
132、60; EXPORT TIM1_BRK_IRQHandler WEAK EXPORT TIM1_UP_IRQHandler
133、0; WEAK EXPORT TIM1_TRG_COM_IRQHandler WEAK
134、60;EXPORT TIM1_CC_IRQHandler WEAK EXPORT TIM2_IRQHandler WE
135、AK EXPORT TIM3_IRQHandler WEAK
136、60;EXPORT TIM4_IRQHandler WEAK EXPORT I2C1_EV_IRQHandler WE
137、AK EXPORT I2C1_ER_IRQHandler WEAK EXPORT
138、 I2C2_EV_IRQHandler WEAK EXPORT I2C2_ER_IRQHandler WEAK
139、0; EXPORT SPI1_IRQHandler WEAK EXPORT SPI2_IRQH
140、andler WEAK EXPORT USART1_IRQHandler WEAK
141、; EXPORT USART2_IRQHandler WEAK EXPORT USART3_IRQHand
142、ler WEAK EXPORT EXTI15_10_IRQHandler WEAK
143、; EXPORT RTCAlarm_IRQHandler WEAK EXPORT OTG_FS_WKUP_IRQHandler WE
144、AK EXPORT TIM5_IRQHandler WEAK
145、60;EXPORT SPI3_IRQHandler WEAK EXPORT UART4_IRQHandler
146、0; WEAK EXPORT UART5_IRQHandler WEAK
147、0; EXPORT TIM6_IRQHandler WEAK EXPORT TIM7_IRQHandler
148、 WEAK EXPORT DMA2_Channel1_IRQHandler WEAK EXPORT DMA2
149、_Channel2_IRQHandler WEAK EXPORT DMA2_Channel3_IRQHandler WEAK EX
150、PORT DMA2_Channel4_IRQHandler WEAK EXPORT DMA2_Channel5_IRQHandler WEAK
151、 EXPORT ETH_IRQHandler WEAK EXPORT ETH_WKUP_IRQHandler
152、; WEAK EXPORT CAN2_TX_IRQHandler WEAK EXPORT CAN2_RX0_IRQHandler WEAK &
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑工程起重机施工合同
- 护坡草坪施工方案
- 护坡桩施工方案
- 云南水泥顶管工程施工方案
- 大别山科技学校数学试卷
- 生物-安徽省天一大联考2024-2025学年(下)2025届高三3月调研考试试题和答案
- 2025年促肝细胞生长素项目合作计划书
- 江西跑步跑道地面施工方案
- 生活给水管道施工方案
- 湖北省宜昌市宜都市2024-2025学年九年级上学期1月期末化学试题(原卷版+解析版)
- 2019版外研社高中英语必选择性必修一单词表
- 常用电工仪器仪表使用方法
- 海南大学本科教育学分制条例
- 建设工程绿色施工围蔽指导图集
- 2022新教科版六年级科学下册全一册全部教案(共28节)
- 单元综合训练
- 中级Java软件开发工程师笔试题(附答案)
- 高一物理必修一加速度(课堂PPT)
- 难免压疮申报表
- 端盖压铸模具设计毕业设计论文
- 最新部编版一年级语文下册第一单元教材分析
评论
0/150
提交评论