如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
ARM启动过程(Cortex-M3NXPLPC1768为例)发布时间:2013-04-1821:58:10来源:EDA中国ARM启动过程(Cortex-M3NXPLPC1768为例)1.基本概念(CMSIS):CortexMicro-controllerSoftwareInterfaceStandard,微控制器软件接口标准。2.CMSIS标准的文件结构:a)core_cm<x>.c(stdint.h)b)system_<device>.c(core_cm<h>,system_<device.h>)c)startup_<device>.s其中core_cm<x>.c以及core_cm<h>中为内核设访问层,其中定义了定义了内核中得外设几丁质以及一些内核的访问及控制函数。startup_<device>.s文件是系统的启动文件,其包括堆和栈的初始化配置、中断向量表的配置以及将程序引导到main()函数等功能。system_<device.h>和system_<device>.c文件则是由ARM公司提供模版,各芯片制造商根据自己芯片的特点来编写的。3.注解startup_<device>.s文件此文件主要完成三项工作:堆栈以及堆的初始化、定位中断向量表、调用ResetHandlera)堆栈以及堆的初始化;<h>StackConfiguration;<o>StackSize(inBytes)<0x0-0xFFFFFFFF:8>;</h>Stack_SizeEQU0x00000200AREASTACK,NOINIT,READWRITE,ALIGN=3//指明8字节对齐(ALIGN=3)Stack_MemSPACEStack_Size__initial_sp//此标号有一层隐含的意思那就是在M3中堆栈是满递减堆//栈,因为它指定了堆栈指针位于堆栈的高地址(在//Stack_Mem之后);<h>HeapConfiguration;<o>HeapSize(inBytes)<0x0-0xFFFFFFFF:8>;</h>Heap_SizeEQU0x00000000AREAHEAP,NOINIT,READWRITE,ALIGN=3__heap_baseHeap_MemSPACEHeap_Size__heap_limit以上堆和栈的具体地址可以在工程编译后产生的*.map文件中看到。b)定位中断向量表PRESERVE8//PRESERVE8指定了以下的代码位8字节对齐THUMB//THUMB指定了接下来的代码为THUMB指令集;VectorTableMappedtoAddress0atResetAREARESET,DATA,READONLY//此语句声明RESET数据段EXPORT__Vectors//导出向量表标号,EXPORT作用类似于C语言中的extern__VectorsDCD__initial_sp;TopofStackDCDReset_Handler;ResetHandlerDCDNMI_Handler;NMIHandlerDCDHardFault_Handler;HardFaultHandlerDCDMemManage_Handler;MPUFaultHandlerDCDBusFault_Handler;BusFaultHandlerDCDUsageFault_Handler;UsageFaultHandlerDCD0;ReservedDCD0;ReservedDCD0;ReservedDCD0;ReservedDCDSVC_Handler;SVCallHandlerDCDDebugMon_Handler;DebugMonitorHandlerDCD0;ReservedDCDPendSV_Handler;PendSVHandlerDCDSysTick_Handler;SysTickHandler;ExternalInterruptsDCDWDT_IRQHandler;16:WatchdogTimerDCDTIMER0_IRQHandler;17:Timer0DCDTIMER1_IRQHandler;18:Timer1DCDTIMER2_IRQHandler;19:Timer2DCDTIMER3_IRQHandler;20:Timer3DCDUART0_IRQHandler;21:UART0(……省略)c)