学海荡舟手机网

主页 > 实用文摘 > 教育文摘_09 > > 详细内容

基于ARM7核处理器VxWorks系统BSP设计_嵌入式系统论文

摘要:该文主要介绍了samsung公司的基于arm7tdmi核s3c4510b微处理器,并详细介绍了利用该处理器所设计的嵌入式系统以及vxworks操作系统下bsp(board supported package)的开发。

    关键词:arm7tdmi s3c4510b vxworks bsp

1 介绍

s3c4510b是三星公司推出的针对嵌入式应用的16/32 位嵌入式处理器,该微控制器专为以太网通信系统的集线器和路由器而设计,具有低成本和高性能的特点, s3c4510b中内置了arm公司设计的16/32位arm7tdmi处理器, 可以执行32位的arm指令,也可执行16位的thumb指令, 并集成了多种外围部件,主要有:

● 时钟频率50mhz

● 内核/io电压3.3v

● 8kb的cache/sram

● 一个10/100mbps 以太网控制器,mii接口

● 两个hdlc通道,每个通道可支持10mbps

● 两个uart通道

● 两个dma通道

● 两个32位定时/计数器

● 18个可编程i/o口

● 中断控制器,支持21个中断源,包括4个外部中断

● 支持sdram,edo dram,sram,flash等

● 具有扩展外部总线

● jtag接口,支持软件开发 ,硬件调试

s3c4510b支持目前常用的嵌入式操作系统,如vxworks、psos、uclinux等,本文将主要介绍vxworks操作系统下的软件开发。

arm7tdmi是arm家族通用的一款32位微处理器,它主要为用户提供了高性能、低价格解决方案。

arm7tdmi具有三级流水线的32位risc处理器,处理器结构为冯·诺依曼load/store。该cpu具有两种指令集,即arm和thumb指令集。arm指令集是32位,它可以利用cpu最大性能;而thumb指令集则是16位指令集。

arm7tdmi内核方块图如图1所示。


2 系统硬件图

该系统主要以s3c4510b为核心,外围集成了以太网卡、sdram、flash、uart以及hdlc等。图2是以s3c4510b为核心的最小系统设计图。

    sdram选用hy57v653220(8mbyte)、两片flash分别为am29f040(存放bootrom)和t28f160bt(作为文件系统用)。

3 vxworks操作系统下bsp构建

在完成板上基本硬件的测试后,下面我就开始对vxworks操作系统下bsp进行开发,开发前需要做一些准备工作,如准备开发工具等。

① 开发工具用的是tornado2.2 for arm;

② 参考资料有bsp kit、s3c4510b datasheet;

③ 参考tornado2.2 for arm下自带的wrsbcarm7 bsp;

④ 烧写程序采用编程器。

通常在开发bsp的时候,我们需要在tornado原带bsp目录下找一个与我们所用的处理器相同或相近。与bsp相关的文件有:rominit.s、sysalib.s、bootinit.c、bootconfig.c、syslib.c、config.h、confignet.h、makefile以及与我们硬件相关的,如串口sysserial.c等。由于篇幅所限,具体的文件作用在此就不说了。下面主要根据s3c4510b来阐述一下bsp开发步骤。

(1)拷贝bsp

将wrsbcarm7 bsp拷贝一份并命名为4510bsp,接下来的工作就是修改该目录下的文件,从而得到自己的bsp。

(2)修改makefile文件

修改4510bsp目录下的makefile文件,修改如下几行:

target_dir = 4510bsp # changed by caiyang

vendor = cai # changed by caiyang

board = myarmboard # changed by caiyang

rom_text_adrs = 01000000 # rom entry address

rom_warm_adrs = 01000004 # rom warm entry address

rom_size = 00080000 # number of bytes of rom space

ram_low_adrs = 00006000 # ram text/data address (bootrom)

ram_high_adrs = 00486000 # ram text/data address (bootrom)

mach_extra =

注解:rom_text_adrs:boot rom的入口地址。对大多数板来说,这就是rom地址区的首地址,然而也有的硬件配置使用rom起始的一部分地址区作为复位向量,因此需要根据此设置偏移量作为它的地址。这个偏移量因cpu结构而定。

rom_warm_adrs:boot rom热启动入口地址。它通常位于固定的rom_text_adrs+4的地方。当需要热启动时,syslib.c文件中systomonitor( )函数代码明确的跳转到rom_warm_adrs地址处开始执行。

rom_size:rom实际大小。

ram_low_adrs:装载vxworks的地址。

ram_high_adrs:将boot rom image拷贝到ram的目的地址。

注意:ram_low_adrs 和 ram_high_adrs 都是绝对地址,通常位于dram起始地址的偏移量处,该偏移量取决于cpu结构,这需要参考vxworks内存分布。对于arm的内存分布请看图3,从图3可以看出ram_low_adrs在dram+0x1000处。这些地址对于s3c4510b来说都应该是重映射后的地址。

(3)修改config.h文件

主要是修改rom_base_adrs、rom_text_adrs、rom_size、ram_low_adrs、ram_high_adrs和undef掉不需要的部分。注意这些应该和makefile文件中设置的一致。

(4)修改rominit.s文件

cpu一上电就开始执行rominit( )函数,因此在rominit.s代码段中它必须是第一个函数。对于热启动,处理器将会执行rominit( )加上4后的代码(具体参考syslib.c中的systomonitor( )函数)。更多的硬件初始化在syslib.c中syshwinit( )函数中,rominit( )的工作就是做较少的初始化并把控制权交给romstart( )(在bootinit.c文件)。

在s3c4510b处理器中,rominit.s文件主要做了以下几个工作:

① 禁止cpu中断并切换到svc32模式;

② 禁止中断控制器;

③ 初始化syscfg、extdbwth、romcon0、romcon1、dramcon0等寄存器,同时初始化了flash、sdram、dm9008等外围设备;

④ 将flash的内容拷贝到sdram中;

⑤ 改变flash和sdram的基地址,将sdram基地址改为0;

⑥ 初始化堆栈指针;

⑦ 跳转到c程序romstart( )函数中。

在这里,只需要修改syscfg、extdbwth、romcon0、romcon1、dramcon0等寄存器来设置flash、sdram、dm9008的基地址和大小即可。这需要根据板上的配置来修改,修改的内容在wrsbcarm7.h文件中。

bsp基本部分就已经修改完成,至于bootinit.c和bootconfig.c文件,我们一般不需要修改它,只是在调试过程中为了方便调试,可以将他们拷贝到bsp目录下,然后修改makefile文件,在makefile文件中添加如下两句。

bootconfig = bootconfig.c

bootinit = bootinit.c

(5)利用tsfs(target server file system)下载

要利用tsfs下载vxworks,首先需要配置以下内容:

① 在config.h文件中添加如下内容

/* serial port configuration */

#define include_serial

#undef num_tty

#define num_tty n_sio_channels

#undef console_tty

#define console_tty 0

#undef console_baud_rate

#define console_baud_rate 38400

/*** wdb ***/

#ifdef serial_debug

#define wdb_no_baud_auto_config

#undef wdb_comm_type

#undef wdb_tty_baud

#undef wdb_tty_channel

#undef wdb_tty_dev_name

#define wdb_comm_type wdb_comm_serial /* wdb in serial mode */

#define wdb_tty_baud 38400 /* baud rate for wdb connection */

#define wdb_tty_channel 1 /* com port #2 */

#define wdb_tty_dev_name "/tyco/1" /* default tycodrv_5_2 device name */

#endif /* serial_debug */

/* tsfs added by caiyang */

#define include_tsfs_boot

并修改引导行为

#define default_boot_line \par "tsfs(0,0)host:vxworks f=8 h=169.254.72.67 e=169.254.72.68 u=caiyang pw=caiyang"

注:串口1用来显示引导,相当于pc机中的显示器,串口2用来下载vxworks和调试。同时串口2波特率不能太高,经测试115200好像不行。

② 配置target server

启动tornado开发环境,选择tool->target server菜单。在下拉菜单中选“target server file system”并选中enable file system,然后目录指向vxworks所在的地方。同时注意要把tornado registry打开,这样配置完后点击launch按钮即可连接成功,此后就可以通过串口2下载vxworks和调试。

一般情况下,我们首先调试好bsp,然后在调试网卡。所以在调试网卡前,我们需要用串口来下载vxworks映像。

至此,我们的bsp就开发完成。

4 结论

在没有调试bsp的硬件工具如仿真器的时候,我们只能通过点灯或者串口输出来定位程序执行的正确性。这大大增加了调试难度和进程。对于bsp开发,一般需要从一个模板来修改。bsp开发的正确性直接影响到vxworks系统运行的稳定性。