周立功ARM启动代码详解

需积分: 9 6 下载量 37 浏览量 更新于2024-10-28 收藏 57KB DOC 举报
"周立功的ARM启动代码分析" 这篇文档是关于ARM处理器的启动代码,由知名嵌入式专家周立功所讲解。启动代码是任何基于ARM微控制器的应用程序执行的第一部分,它负责设置处理器的状态、初始化硬件、分配内存空间以及调用应用程序的主入口函数。这里主要涉及了在LPC系列芯片上的C语言启动代码。 1. **堆栈配置** 在启动代码中,定义了不同模式下的堆栈大小。例如,`SVC_STACK_LEGTHEQU0`、`FIQ_STACK_LEGTHEQU0`、`IRQ_STACK_LEGTHEQU256`等分别定义了系统服务(SVC)、快速中断(FIQ)和服务中断(IRQ)的堆栈大小。堆栈用于保存处理器在执行中断或子程序调用时的上下文信息。 2. **处理器模式** ARM处理器有多种运行模式,如用户模式(USR32Mode)、系统模式(SYS32Mode)、中断模式(IRQ32Mode)、快速中断模式(FIQ32Mode)等。这些模式的定义(如USR32ModeEQU0x10、IRQ32ModeEQU0x12等)用于设置处理器状态,以便在不同条件下正确地处理任务。 3. **寄存器定义** 部分代码定义了如`PINSEL2EQU0xE002C014`这样的寄存器地址,这些通常是微控制器的外设接口控制寄存器,用于配置I/O引脚功能、波特率等。 4. **配置寄存器** `BCFG0EQU0xFFE00000`、`BCFG1EQU0xFFE00004`等表示配置寄存器的地址,这些寄存器通常用于初始化微控制器的外围设备,比如设置总线配置、时钟源、电源管理等。 5. **外部标号导入与导出** `IMPORT`和`EXPORT`关键字用于声明和提供对其他函数或变量的访问。例如,`IMPORT__use_no_semihosting_swi`表示使用无半主机模式的软件中断,`IMPORT__main`是C语言主程序的入口点,`IMPORTFIQ_Exception`是快速中断异常处理程序。同时,`EXPORT`关键字导出了如堆栈和堆的边界,供其他代码段使用。 6. **中断向量表** 启动代码还包括中断向量表,如`Reset`、`Undefined`等,它们是处理器响应不同类型异常或中断时跳转的地址。`Reset`是复位中断处理程序,通常用于初始化系统。 7. **程序流程** `ENTRY`指令标志着程序的开始,`Reset`是处理器复位后执行的第一个地址,`LDR PC, ResetAddr`加载新的程序计数器值,使得处理器开始执行复位后的初始化代码。接着,调用`TargetResetInit`初始化目标板,然后调用`__main`进入C语言的主程序。 总结来说,周立功的ARM启动代码分析涉及了微控制器启动时的堆栈设置、处理器模式、外设初始化、中断处理等多个关键点,是学习和理解ARM系统开发的重要参考资料。