三星ARM9 2440启动代码解析

需积分: 9 1 下载量 134 浏览量 更新于2024-09-19 收藏 51KB PDF 举报
"本文档详细解释了ARM9 2440处理器的启动代码,包括配置内存、中断服务例程(ISR)、堆栈以及初始化C语言变量等内容。该启动代码由不同版本进行修改和优化,适用于三星的ARM9 2440芯片。文档中的注释提供了对代码功能的简要说明,并且定义了一些关键的常量和工作模式。" ARM9 2440是基于ARMv5TE架构的一款微处理器,广泛应用于嵌入式系统。启动代码是处理器上电或复位后执行的第一段程序,它负责初始化硬件环境,为后续的操作系统或应用程序运行做准备。以下是对ARM9 2440启动代码中关键部分的详细解析: 1. **包含头文件**:代码第12行到15行,通过`GET`指令包含了`option.inc`, `memcfg.inc`和`2440addr.inc`这三个头文件。这些头文件可能包含了特定的配置信息,如内存映射、中断向量表地址等。 2. **定义常量**:从第16行开始,定义了一些重要的常量。例如,`BIT_SELFREFRESH`(0x1<<22)用于设置SDRAM的自刷新状态;`USERMODE`到`UNDEFMODE`定义了处理器的六种工作模式;`MODE_MASK`用于提取当前模式;`NOINT`则用于关闭中断。 3. **堆栈设置**:从第29行开始,定义了六种工作模式的堆栈地址,如`UserStack`、`SVCStack`和`UndefStack`,它们是在 `_STACK_BASEADDRESS` 上减去特定偏移量得到的。堆栈在处理函数调用、异常和中断时起着关键作用,确保数据和指令的正确存储和恢复。 4. **启动过程**:启动代码通常会执行以下步骤: - **配置内存**:初始化SDRAM控制器,设置内存映射和自刷新状态。 - **设置中断**:配置中断控制器,设定中断向量表的位置,以便正确处理中断请求。 - **初始化堆栈**:为每种工作模式分配并初始化堆栈,保证异常或中断发生时有正确的堆栈空间可用。 - **设置寄存器**:设置处理器的工作模式、状态寄存器和其他控制寄存器。 - **初始化C变量**:如果需要在C语言环境中运行,启动代码还需要初始化全局变量和静态变量。 5. **中断模式**:ARM9 2440支持多种中断模式,包括用户模式(USERMODE)、快速中断模式(FIQMODE)、中断模式(IRQMODE)、监管模式(SVCMODE)、异常中断模式(ABORTMODE)和未定义模式(UNDEFMODE)。每个模式都有其特定的用途和优先级,例如,FIQ用于高速数据传输,而IRQ用于常规中断处理。 6. **模式掩码**:`MODE_MASK`(0x1f)用于从处理器的 CPSR(Current Program Status Register)中提取当前运行模式,这对于在不同模式之间切换和处理中断至关重要。 启动代码的编写必须精确无误,因为它直接影响到系统的稳定性和性能。在开发基于ARM9 2440的嵌入式系统时,理解这部分代码是至关重要的,因为它确保了处理器能正确地启动并进入可执行用户代码的状态。