ARM9 S3C2440 启动源代码深度解析

需积分: 9 2 下载量 41 浏览量 更新于2024-09-16 收藏 51KB PDF 举报
"这篇文档是关于ARM9处理器S3C2440的启动代码解析,主要涵盖了初始化内存、中断服务、堆栈设置以及C变量的初始化等内容。这份资料适用于ARM平台的学习者,包含了从2002年至2003年的版本更新历史。" 在嵌入式系统开发中,理解处理器的启动过程至关重要,特别是对于基于ARM9内核的S3C2440芯片。启动代码,通常命名为`2440INIT.S`,是系统上电后执行的第一段汇编代码,负责设置系统的基础环境。下面将详细解释这段启动代码的关键部分: 1. **配置内存**:S3C2440是一款支持SDRAM的微控制器,启动代码中会配置SDRAM的相关设置,例如预定义的`BIT_SELFREFRESH`用于控制SDRAM的自刷新状态,这在低功耗应用中尤为重要。 2. **中断服务**:中断是嵌入式系统中的关键机制,`IRQMODE`和`FIQMODE`分别表示中断模式和快速中断模式,启动代码会初始化中断处理程序,并设置中断堆栈,如`SVCStack`、`UserStack`等,确保在中断发生时能正确保存处理器状态。 3. **堆栈设置**:堆栈是程序运行过程中存储临时数据和返回地址的地方,启动代码会为不同模式(如用户模式、中断模式、服务模式等)设置不同的堆栈空间,确保在模式切换时能正确处理数据。 4. **C变量初始化**:在启动代码执行完毕后,通常会跳转到C语言的`main()`函数,因此需要进行必要的C运行时环境初始化,如设置全局变量的初始值,设置BSS段(未初始化数据段)为零等。 5. **工作模式定义**:ARM9处理器有多种工作模式,如`USERMODE`、`FIQMODE`、`IRQMODE`、`SVCMODE`、`ABORTMODE`和`UNDEFMODE`,每个模式都有其特定的用途和优先级。`MODE_MASK`用于标识这些模式的位掩码。 6. **中断状态控制**:`NOINT`常量用于禁止中断,这在初始化阶段是常见的操作,以避免中断影响系统的初始化流程。 7. **汇编指令与宏**:如`GET`指令(或等价的`INCLUDE`)用于引入其他汇编文件,如`memcfg.inc`、`2440addr.inc`,这些文件可能包含了内存配置和S3C2440寄存器地址等信息。 这段启动代码详尽地介绍了S3C2440的初始化步骤,对于学习ARM9处理器和嵌入式系统开发的人员来说,是深入理解系统运行原理的重要参考资料。通过阅读和分析这部分代码,可以掌握从硬件层面如何设置和控制处理器,以及如何为C语言运行环境打下基础。