ARM9 S3C2440 启动代码深度解析

需积分: 9 0 下载量 92 浏览量 更新于2024-09-14 收藏 51KB PDF 举报
"这篇文档是关于ARM9处理器S3C2440的启动代码分析,主要涵盖了初始化内存、中断服务程序(ISR)配置、堆栈设置以及C变量的初始化等关键步骤。文档历史悠久,从2002年到2003年经过多次修订,适合从事ARM9驱动开发的学习者参考。" 在嵌入式系统中,尤其是基于ARM架构的处理器,如ARM9 S3C2440,启动代码是整个系统运行的基础。这段启动代码(2440INIT.S)是汇编语言编写,负责在系统上电或复位后执行一系列初始化操作。以下是对文档内容的详细解析: 1. **包含头文件**: - `GEToption.inc`: 包含了系统选项相关的配置,如堆栈基地址等。 - `GETmemcfg.inc`: 可能包含了内存配置的详细信息,如SDRAM的配置参数。 - `GET2440addr.inc`: 包含了S3C2440芯片特定寄存器的地址定义。 2. **定义常量**: - `BIT_SELFREFRESH`: 定义了一个位常量,表示SDRAM的自刷新状态(1<<22)。 - 接下来的几行定义了ARM处理器的不同工作模式,例如用户模式(USERMODE)、快速中断模式(FIQMODE)、中断模式(IRQMODE)、监管模式(SVCMODE)、异常中断模式(ABORTMODE)和未定义模式(UNDEFMODE)。这些模式用于处理器在不同情况下的运行状态管理。 3. **模式掩码**: - `MODE_MASK` 用于确定当前处理器的工作模式,它是一个五位的掩码,与模式寄存器的低五位进行与操作,可以获取当前的工作模式。 4. **中断控制**: - `NO_INT` 是一个控制位,值为0xc0,可能用于关闭所有中断。 5. **堆栈设置**: - 文档中定义了不同工作模式的堆栈起始地址,例如用户模式的堆栈(UserStack)、服务模式的堆栈(SVCStack)和未定义模式的堆栈(UndefStack),它们都是基于全局堆栈基地址向下偏移一定的字节数。 启动代码的主要任务是: - **配置内存**:这可能涉及到设置SDRAM控制器的寄存器,以确保内存能够正常工作,包括初始化时钟、自刷新设置等。 - **配置中断**:设置中断服务程序的入口地址,并可能对中断优先级进行配置。 - **设置堆栈**:为每个工作模式分配堆栈空间,以便在进入该模式时能够正确地保存处理器状态。 - **初始化C变量**:当控制权转移到C代码之前,需要对全局变量进行初始化,通常涉及设置BSS段为零和复制数据段到内存。 以上就是ARM9 S3C2440启动代码的核心内容,对于理解处理器启动过程、学习嵌入式系统开发以及调试驱动程序至关重要。通过深入研究这部分代码,开发者可以更好地掌握系统级别的控制和优化技巧。