eCos在基于ARM7硬件平台上的应用

技术分类: 嵌入式系统  | 2008-05-07
来源:单片机及嵌入式系统应用 | 作者:北京航空航天大学 钱问发 满庆丰 耿春明

  2 系统硬件框架

  本系统是一个以ARM7为核心构成的测控系统,通过对传感器的脉冲信号进行处理而得到待测物料的流量,并通过控制给料器的给料速度达到流量控制的目的。对于一个有实用价值的测控系统,必须具有人机交互、闭环控制、数据通信和存储等功能。本课题所研制的流量测控系统的硬件框图如图3所示。

流量测控系统的硬件框图

  图3中,处理器为ARM7内核的工业级芯片AT91M55800,其强大的功能保证了系统的实时性和稳定性的要求。2 MB的Flash SST39VFl60用来保存程序代码、测量所需的一些参数以及测量结果的简单统计信息。在工业生产中,经常需要对一次测量中的数据进行历史再现,以便对一些事故或故障进行排查。本系统通过采用1MB的大容量RAM来实现这一功能:除了用来作为程序运行时的内存外,RAM还用来实时保存每一时刻的测量数据。USB总线的通信口用来和现场计算机进行通信,以实现一些更加完善的处理,如数据打印、结果分析、实时数据的硬盘保存等。分辨率为320×240的LCD用来作为系统的显示终端配合4×5的键盘来完成系统的人机交互操作。对变频器的控制和对温度信号的采集通过485总线完成。6路脉冲信号是本系统测量功能的核心,通过对这6路脉冲进行处理可以得到流量相关的所有信息。4~20 mA电流信号用来控制给料系统,以实现闭环控制。由于在工业环境中使用,对于一些长线连接必须采取隔离措施。本系统对测量脉冲、485通信信号和4~20mA电流信号都采取了光电隔离措施。

  3 eCos在系统上的移植与应用软件编写

  3.1 eCos内核的移植

  由于eCos内核采用了可配置的模块化设计思想,因此只要修改硬件抽象层HAL的代码和CDL脚本并且在ecos.db中注册就可以应用于新的且标系统。HAL又可以细分为3个层次:①体系结构抽象层。eCos是可以应用于多种体系结构平台上的操作系统,如ARM、MIPS、POWERPC等,在eCos发布时已经将这些体系结构层的移植包一同发布了出来。本系统的体系结构抽象层是ARM7体系结构抽象层。②变体抽象层。对于同一种体系结构的处理器,各生产厂家会有不同的系列和型号(如Atmel的AT91系列、Philips的LPC系列等),虽然它们都采用ARM?体系结构,但是不同的寄存器配置模式和中断处理方法也会影响到eCos的移植。本系统所使用的处理器AT91M55800使用较为普遍,在eCos开源社区已经有移植好的AT9lM55800变体抽象层的代码和CDL脚本,只需作系统启动后对I/O口的赋值情况等少许的改动即可完成对变体抽象层的移植。③平台抽象层。平台抽象层是对目标系统的整个硬件平台进行抽象,包括平台的启动、芯片配置、定时、I/O寄存器及中断寄存等等。

  系统需要进行的移植工作主要是平台抽象层的移植,而平台抽象层中最重要的是Flash驱动包和内存布局文件的移植。主要的步骤为:

  ①安装AT91M55800变体抽象层包。从eCos开源社区下载好的变体抽象层包在一个名为eb55的文件夹中,在这个文件夹中还有cdl、include、src等子文件夹分别包含了CDL脚本、头文件,源文件。由于eCos的软件包有严格的层次结构,所以在安装软件包时应遵循这一结构以便于维护。AT91M55800属于ARM7的一个变体,同AT9l系列的其他CPU处于同一层次,所以变体抽象层软件包文件夹eb55的具体路径应为/hal/arm/at91/eb55。接下来还应在ecos.db中注册变体抽象层包,以package关键字注册名为CYGPKG_HAL_ARM_AT91_EB55的包,这个名字必须和包中CDL文件hal_arm_at91_eb55.cdl中的所定义的包名完全一致。在包名后面的花括号中登记hal_arm_at91_eb55.cdl文件的路径及文件名,以及对该包的简单文字说明。

  ②编写Flash的底层驱动软件包,以便能够操作目标系统的Flash存储器。由于本系统在前期调试和代码固化时利用了RedBoot,而RedBoot通过Flash驱动程序操作目标Flash,所以必须先移植好Flash驱动程序才能进行更进一步的开发工作。

  首先需要编写底层驱动程序源文件。不同的Flash的块空间大小以及写操作一般是不一样的。本系统所用的Flash SST39VF160是2 MB的16位NOR Flash,共有512(0x200)个块空间,其块大小为4K(0x1000),写操作的命令码符合JEDEC标准。这些特点与Atmel公司AT49系列Flash比较类似,因此Flash驱动程序可以从eCos发布时自带的AT49系列Flash的驱动程序修改得到。最重要的地方是修改描述Flash特性的结构体flash_dev_info_t变量中成员block_size和block_count的值,使其分别为Oxl000和0x200。

  接下来需要编写与Flash底层驱动对应CDL脚本,使配置工具configtool能够正确配置编译Flash驱动程序。这个CDL文件完全可以参照AT49驱动包中的CDL文件编写。以cdl_package关键字定义名为CYGPKG_DEVS_Flash_SST_39VF160的包,在命令体中给出具体的配置参数。由于底层驱动包必须结合上层驱动才能工作,所以在命令体中用active_if CYGPKG_IO_Flash命令告诉configtool,必须在上层驱动包CYGPKG_IO_Flash已经被包含的情况下底层驱动包才会使能。

  最后,需要在ecos.db中注册底层驱动软件包。具体做法和变体抽象层包的注册方法相同。

1】【2】【3
加载中

对文章的评论

剩余字数:  

浏览该文章的用户还看过...

  • 文 章

  • 论 坛

  • 博 客

  • 小 组

设计资源与分销