ARM启动代码分析与注释

需积分: 9 4 下载量 10 浏览量 更新于2024-07-31 收藏 160KB PDF 举报
"该资源是一份关于ARM架构处理器的启动代码注释,主要针对2440芯片。代码包括初始化内存、中断服务程序(ISR)、堆栈以及C语言变量的设置。这份文档适合在ADS(ARM Development Studio)环境下使用,并且经过多次修订和优化以适应2440芯片的需求。" 本文将详细解析这份ARM启动代码中的关键概念和技术细节。 首先,启动代码是系统上电或复位后执行的第一段程序,它负责设置处理器的基础环境,以便后续的C代码能够正常运行。2440INIT.S文件就是这样的启动代码,它的任务包括: 1. **配置内存**:这涉及到设置存储器控制器的参数,确保数据和指令能正确读写。这部分可能涉及到设置SDRAM的时序、刷新控制等。 2. **设置中断服务程序(ISR)**:启动代码需要初始化中断向量表,为不同的中断源分配处理函数的地址,以便在中断发生时处理器能够找到正确的响应代码。 3. **配置堆栈**:在不同的处理器模式下,需要有不同的堆栈空间来保存状态信息。例如,USERMODE、FIQMODE、IRQMODE、SVCMODE、ABORTMODE和UNDEFMODE等都有各自的堆栈。代码中定义了这些模式对应的堆栈地址,如UserStack、SVCStack、UndefStack和AbortStack。 4. **初始化C语言变量**:启动代码通常会调用C运行时库的初始化函数,以确保全局变量和静态变量的正确初始化。 在汇编代码中,我们看到一些关键的定义: - `BIT_SELFREFRESHEQU(1<<22)`:这是SDRAM的自刷新位,用于在低功耗模式下保持数据完整性。 - `USERMODEEQU0x10`等:定义了处理器的不同工作模式,这些模式由CPSR寄存器的M[4:0]字段决定。 - `NOINTEQU0xc0`:可能表示关闭所有中断的状态,通常在关键操作期间使用,以避免中断打断。 启动代码还需要处理其他一些初始化任务,如设置处理器寄存器、初始化时钟、外设等。在ADS环境下,这通常是通过汇编语言实现,因为它们对硬件的访问更为直接和高效。理解这些启动代码对于深入理解ARM系统的运作机制至关重要,特别是在开发嵌入式系统时。