中断向量表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
******************** (C) COPYRIGHT 2009 STMicroelectronics ********************
;* File Name : startup_stm32f10x_cl.s
;* Author : MCD Application Team
;* Version : V3.1.0
;* Date : 06/19/2009
;* Description : STM32F10x Connectivity line devices vector table for RVMDK
;* toolchain.
;* This module performs:
;* - Set the initial SP
;* - Set the initial PC == Reset_Handler
;* - Set the vector table entries with the exceptions ISR address
;* - 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 TH EM TO SAVE TIME.
; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DI RECT,
; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARIS ING FROM THE
; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF TH E CODING
; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. ;*******************************************************************************
; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs
;
;
;
; 首先对栈和堆的大小进行定义,并在代码区的起始处建立中断向量表,其第一个表项是栈; 顶地址,第二个表项是复位中断服务入口地址。然后在复位中断服务程序中跳转C/C++标; 准实时库的__main函数。假设STM32被设置为从内部FLASH启动中断向量表起始地位为0x8000000,
; 则栈顶地址存放于0x8000000处,而复位中断服务入口地址存放于0x8000004处。当STM32遇
; 到复位信号后,则从0x80000004处取出复位中断服务入口地址继而执行复位中断服务程序,
; 然后跳转__main函数,最后来到C的世界。
; DCD指令:作用是开辟一段空间,其意义等价于C语言中的地址符“&”。开始建立的中断向量
; 表则类似于使用C语.其每一个成员都是一个函数指针,分别指向各个中断服务函数
;伪指令AREA,表示开辟一段大小为Stack_Size的内存空间作为栈,段名是STACK,可读可写。
;NOINIT:指定此数据段仅仅保留了内存单元,而没有将各初始值写入内存单元,或者将各个内存单元值初始化为0
;常见的数据定义伪指令有如下几种:
;— DCB 用于分配一片连续的字节存储单元并用指定的数据初始化。
;— DCW (DCWU)用于分配一片连续的半字存储单元并用指定的数据初始化。
;— DCD (DCDU)用于分配一片连续的字存储单元并用指定的数据初始化。
;— DCFD (DCFDU)用于为双精度的浮点数分配一片连续的字存储单元并用指定的数据初始化。
;— DCFS DCFSU)用于为单精度的浮点数分配一片连续的字存储单元并用指定的数据初始化。
;— DCQ DCQU)用于分配一片以 8 字节为单位的连续的存储单元并用指定的数据初始化。
;— SPACE 用于分配一片连续的存储单元
;— MAP 用于定义一个结构化的内存表首地址
;— FIELD 用于定义一个结构化的内存表的数据域
;EXPORT伪指令用于在程序中声明一个全局的标号,该标号可在其他的文件中引用。EXPORT可用GLOBAL代替。标号在程序中区分大小写,[WEAK]选项声明其他的同名标号优先于该标号被引用。
;;启动代码作用一般是:
;;1)堆和栈的初始化;
;2)向量表定义;
;;3)地址重映射及中断向量表的转移;
;;4)设置系统时钟频率;
;;5)中断寄存器的初始化;
;;6)进入C应用程序。
;1)堆和栈的初始化
Stack_Size EQU 0x00000400 ;栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈
;SPACE用来分配一片连续的存储区域并初始化为0.
AREA STACK, NOINIT, READWRITE, ALIGN=3 ;AREA 伪指令用于定义一个代码段或数据,;定义栈,可初始为0,8字节对齐2*2*2,2的3次方
;NOINIT:指定此数据段仅仅保留了内存单元,