详解Mini2440启动代码init.s:内存配置与工作模式设置

3星 · 超过75%的资源 需积分: 9 76 下载量 71 浏览量 更新于2024-11-07 收藏 51KB PDF 举报
本文档详细解析了友善之臂迷你2440(Mini2440)的启动代码`init.s`。该代码主要用于初始化嵌入式系统,包括内存配置、中断服务请求(ISR)处理、堆栈设置以及C变量的初始化。代码开始于包含必要的头文件,如`GEToption.inc`和`GETmemcfg.inc`,这些头文件可能包含了平台特定的配置信息。 首先,代码定义了一个标志位`BIT_SELFREFRESHEQU(1<<22)`,用于控制SDRAM的自我刷新功能。接下来,预定义了六个不同的工作模式常量:用户模式(USERMODE)、快速中断模式(FIQMODE)、中断模式(IRQMODE)、监管模式(SVCMODE)、异常中断模式(ABORTMODE)和未定义模式(UNDEFMODE)。这些模式用于处理器在不同运行时状态下的行为管理,而`MODEMASK`则是一个掩码,用于组合和操作这些模式。 堆栈的地址设置是代码中的关键部分,因为它们在异常处理和任务切换中扮演重要角色。`_STACK_BASEADDRESS`是一个由`option.inc`文件预先定义的全局变量,它指示堆栈的基础地址。根据这种定义,`UserStackEQU`指定了用户模式堆栈的起始地址,`SVCStackEQU`对应于监管模式堆栈,`UndefStackEQU`代表未定义模式堆栈,而`AbortStackEQU`则为异常中断模式堆栈。 此外,文档还提到了`NOINTEQU0xc0`,这可能是用于临时禁用中断的宏定义,以便在执行某些特定任务时保护CPU不受外部中断的影响。 整个`init.s`代码段的作用是确保系统在启动阶段正确配置硬件资源,设置必要的模式,以及初始化堆栈,这些都是嵌入式系统正常运行的基础。随着时间的推移,该代码还进行了多次修改,以适应Mini2440的具体需求,比如添加测试STOP和Sleep模式的功能。通过理解这些细节,开发人员可以深入掌握嵌入式系统的启动流程,为后续的软件开发提供坚实的基础。