基于 ARM 体系的嵌入式系统 BSP 的程序设计
 
→注塑行业动态频道 国际注塑 设备动态 原料动态 模具动态 周边配套 人才动态 会员动态 风采动态
综合动态 国内注塑
请输入

基于 ARM 体系的嵌入式系统 BSP 的程序设计

(时间:2008-9-3 16:55:49 共有 人次浏览)
摘要: 在介绍基于 ARM 体系的嵌入式系统启动流程的基础上,结合编程实例,详细、系统地叙述了 BSP (板级支持包)程序的各个组成部分及其具体设计方案,并就实际程序设计中的几个难点问题做了说明。
关键词: ARM体系BSP 嵌入式系统 ARM处理器
本文介绍基于 ARM 体系的嵌入式应用系统初始化部分 BSP 的程序设计。本文引用的源码全部是基于 龙人的HMS320C7202 芯片设计,并已成功运行。 (深圳龙人嵌入式事业部在向海内外提供嵌入式开发、嵌入式解决方案(ARM解决方案、ARM9解决方案)与嵌入式产品(ARM开发板、ARM9开发板、ARM7开发板、ARM工控板)的同时立志成为行业内最优秀最完备的嵌入式软件、嵌入式硬件技术及嵌入式系统解决方案提供商。)
1 初始化过程
尽管各种嵌入式应用系统的结构及功能差别很大,但其系统初始化部分完成的操作有很大一部分是相似的。
1.1 设置入口指针
启动程序首先必须定义指针,而且整个应用程序只有一个入口指针。一般地,程序在编译链接时将异常中断向量表链接在 0 地址处,并且作为整个程序入口点。入口点代码如下:
ENTRY ( _start ) ;开始
1.2异常中断向量表
ARM 要求中断向量表必须放置在从 0 开始、连续 8×4 字节的空间内。
每当一个中断发生后, ARM 处理器便强制把程序计数器( PC )指针置为向量表中对应中断类型的地址值。因为每个中断向量仅占据放置 1 条 ARM 指令的空间,所以通常放置 1 条跳转指令或向程序计数器( PC )寄存器赋值的数据访问指令,使程序跳转到相应的异常中断处理程序执行。如果异常中断处理程序起始地址小于32MB,使用B跳转指令;如果跳转范围大于32MB,使用LDR指令。
另外,对于各未用中断,可使其指向一个只含返回指令的哑函数,以防止错误中断引起系统的混乱。
1.3 初始化存储系统
初始化存储系统的编程对象是系统的存储器控制器,一个系统可能存在多种存储器类型的接口,不同的存储系统的设计不尽相同。Flash和SRAM同属于静态存储器类型,可以合用一个存储器端口;而DRAM因为有动态刷新和地址线复用等特性,通常配有专用的存储器端口。其中,SDRAM必须在初始化阶段进行设置,因为大部分的程序代码和数据都要在SDRAM中运行。
在HMS30C7202中,与SDRAM配置有关的寄存器有4个:配置寄存器、刷新定时寄存器、写缓冲写回寄存器和等待驱动寄存器,需要根据实际的系统设计对此分别加以正确配置。
SDRAM的初始化过程如下:加电→延迟10ms(各具体SDRAM器件延时时间可能不同)→设置配置寄存器参数→延时→写刷新定时寄存器,设置刷新周期→延时→使能自动刷新→延时→设置模式寄存器(位于SDRAM内部)。
1.4 存储器地址分布重映射(remap)和MMU
系统一上电,程序将自动从0地址处开始执行。因此,必须保证在0地址处存在正确的代码,即要求0地址开始入是非易失性的ROM或Flash等。但是因为ROM或Flash的访问速度相对较慢,每次中断响应发生后,都要从读取ROM或Flash上面的向量表开始,影响了中断响应速度。一般程序执行后将SDRAM映射为地址0,并把系统程序加载到SDRAM中运行,其具体步骤可以采用以下的方案:
(1)上电后,从0地址的ROM开始往下执行;
(2)根据映射前的地址,对SDRAM进行必要的代码和数据拷贝;
(3)拷贝完成后,进行重映射操作;
(4)因为RAM在重映射前准备好了内容,使得PC指针能继续在RAM里取得正确的指令。
在这种地址映射的变化过程中,程序员需要仔细考虑的是:程序的执行流程不能被这种变化所打断,注意保证程序流程在重映射前后的承接关系。
1.5初始化各模式下的堆栈指针
因为ARM处理器有7种执行状态,每一种状态的堆栈指针寄存器(SP)都是独立的(System和User三项式使用相同SP寄存器)。因此,对程序中需要用到的每一种模式都要给SP寄存器定义一个堆栈地址。方法是改变状态寄存器(CPSR)内的状态位,使处理器切换到不同的状态,然后给SP赋值。
16 初始化有特殊要求的端口、设备
有些关键的I/O部件必须在使能IRQ和FIQ之前进行初始化。因为如果在使能IRQ和FIQ之前没有进行初始化,可以产生假的异常中断信号。程序中初始化了HMS30C7202的串口1用来调试程序与其它设备通信。串口1是一个通用全双工异步接收/发送器(UART),它支持16C550的大部分功能。UART有接收缓冲/发送保持寄存器、波特率除数锁存器、中断允许寄存器等9个寄存器。
17切换处理器模式,开中断
最后转换到应用程序运行所需的最终模式,一般是User模式。不要过早切换到User模式进行User模式的堆栈设备。因为进入User模式后就不能再操作CPRS回到别的模式了,可能会对接下去的程序执行造成影响。
18 呼叫主应用程序
当所有的系统初始化工作完成后,就需要把程序流程转入主应用程序。
总之,本文介绍的BSP程序已经在以HMS30C7202为主芯片的开发系统上运行并测试通过,并且成功地引导了Linux内核,文中引用代码可以直接使用。今后可以在此基础上添加命令行解释程序,在引导操作系统前进行存存储器的读写等,扩展开发系统的功能。


我要评论】 【推荐给朋友】 【来源: 互联网】 【关闭窗口
本信息来自互联网,由注塑网友提供,真实性未经中国注塑网证实,仅供您参考。未经许可,不得转载。如果有涉及到版权问题,请发邮件到yxx888@yxx.com.cn,我们会及时删除或处理。
打印 打印该页
 相关资讯 >>更多资讯
 相关评论 >>更多评论
 发表评论

 最新资讯

 热门资讯



客服中心: TEL:021-54436219 广告联系:13818854208 13916528239 塑塑会员:13482466087 人才招聘:13701953738
   E-mail:技术解答有事点这里推广有事点这里会员有事点这里
关于我们| ◆广告服务 ◆帮助中心 地址:上海归国留学生创业园综合办公楼 | 邮编:201108
中国注塑网 版权所有 2005-2008 法律支持:汇业律师事务所 律师:汪兆军 王淑燕

<<经营许可证>>沪B2-20050367