### ARM开发教程之ARM体系的嵌入式系统BSP的程序设计 #### 一、引言 随着32位RISC技术的发展,ARM公司在该领域取得了显著成就,其CPU架构经历了从V3到V6的重大演进。在嵌入式系统开发过程中,板级支持包(Board Support Package, BSP)扮演着至关重要的角色。BSP位于硬件和操作系统之间,类似于PC中的BIOS,负责硬件初始化,并为操作系统提供必要的服务。本篇文章旨在深入探讨基于ARM体系的嵌入式应用系统中BSP程序设计的相关知识点。 #### 二、BSP概述 **BSP**(Board Support Package)是针对特定硬件平台的一组驱动程序和服务,它在操作系统的上下文中运行。不同操作系统下的BSP具有不同的定义形式,例如VxWorks的BSP与Linux的BSP在实现功能上相似,但在写法和接口定义上有所不同。此外,了解所使用的芯片资料至关重要,尽管ARM内核兼容,但每家芯片厂商都会有自己的特色。 #### 三、BSP设计关键步骤 ##### 3.1 设置入口指针 启动程序首先需要定义一个唯一的入口指针。通常情况下,程序在编译链接时会将异常中断向量表链接到0地址处,作为整个程序的入口点。例如,在HMS320C7202芯片中,入口点代码如下: ```assembly ENTRY(_start) ; 开始 ``` ##### 3.2 设置异常中断向量表 ARM处理器要求中断向量表必须放置在从0地址开始、连续8×4字节的空间内。各异常中断向量地址及其对应的优先级如表所示: | 中断向量地址 | 异常中断类型 | 异常中断模式 | 优先级 | |---------------|-----------------------|---------------------|--------| | 0x0 | 复位 | 特权模式(SVC) | 1 | | 0x4 | 未定义中断 | 未定义指令中止模式 | 6 | | 0x8 | 软件中断(SWI) | 特权模式(SVC) | 6 | | 0x0c | 指令预取中止 | 中止模式 | 5 | | 0x10 | 数据访问中止 | 中止模式 | 2 | | 0x14 | 保留 | 未使用 | - | | 0x18 | 外部中断请求(IRQ) | 外部中断(IRQ)模式 | 4 | | 0x1c | 快速中断请求(FIQ) | 快速中断(FIQ)模式 | 3 | 当发生中断时,ARM处理器会将程序计数器(PC)指向向量表中对应中断类型的地址值。通常会在每个中断向量位置放置一条跳转指令或向PC寄存器赋值的指令,引导程序跳转至相应的异常中断处理程序。 ##### 3.3 初始化存储系统 初始化存储系统主要涉及系统的存储器控制器。对于HMS320C7202这样的系统,可能包含Flash、SRAM和SDRAM等多种存储器类型。这些存储器类型的设计可能会有所不同,例如Flash和SRAM可以共用一个存储器端口,而SDRAM由于需要动态刷新和地址线复用等特性,通常会配备专用的存储器端口。 在HMS320C7202中,与SDRAM相关的寄存器包括配置寄存器、刷新定时寄存器、写缓冲回写寄存器和等待驱动寄存器。正确的初始化过程包括: 1. 加电 2. 延迟10ms(根据不同SDRAM器件的具体要求可能有所不同) 3. 设置配置寄存器参数 4. 延迟 5. 写入刷新定时寄存器,设置刷新周期 6. 延迟 7. 使能自动刷新 8. 延迟 9. 设置模式寄存器(位于SDRAM内部) ##### 3.4 存储器地址分布重映射和MMU 系统启动时,程序默认从0地址开始执行。为了确保0地址处存在正确的代码,通常这里需要是非易失性存储器(如ROM或Flash)。然而,由于ROM/Flash的速度相对较慢,不利于高性能计算任务的执行。因此,在完成SDRAM初始化之后,需要通过内存管理单元(Memory Management Unit, MMU)重新映射存储器地址分布,将大部分程序代码和数据迁移到SDRAM中,从而提高整体性能。 #### 四、总结 本文介绍了基于ARM体系的嵌入式应用系统中BSP的程序设计,重点探讨了初始化过程的关键步骤。通过对入口指针的设置、异常中断向量表的配置、存储系统的初始化以及存储器地址分布重映射的理解,可以更好地掌握嵌入式系统的开发流程和技术要点。这些知识对于BSP程序员来说尤为重要,因为他们不仅需要了解硬件细节,还要熟悉软件开发和操作系统的工作原理。随着嵌入式技术的发展,掌握这些核心概念将有助于开发者构建更高效、更可靠的嵌入式应用系统。
- 粉丝: 101
- 资源: 6万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助