基于ARM7核处理器VxWorks系统BSP设计_嵌入式系统论文
关键词: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系统运行的稳定性。