3.5 以太网接口电路设计
用RTL8201BL型网口电路实现Power-PC440GP与100MHz以太网的接口,使用外部25MHz晶体振荡器,通过16PT8515型网络滤波器连接以太网,如图4所示。由于PowerPC440GP带有100 MHz以太网MAC,所以能够实现和RTL820lBL的
3.6 系统启动配置
PowerPC440GP有1个I2C总线启动配置控制器。当引脚UARTO-DCD#被置为高电平时使能该控制器。选用1个保存有启动配置信息的AT24C32连接到I2CO接口作为从设备。当系统上电或者复位时,该控制器能够从位于I2C0接口的从设备中连续读取16个字节。这16个字节数据被保存在4个上电配置寄存器CPC0-STRPO:3中,用来初始化PLL设置、片内各总线时钟率、启动位置、启动宽度及一些用户定义的配置等。如果读取数据失败或者引脚UART0-DCD#被置于低电平,则这些配置将全部使用默认值。另一配置引脚UART0-DSR#置高电平或低电平决定了I2C总线从设备7位地址是0xA0还是0xA8。
4 VxWorks的开发与移植
本系统选用Windriver公司推出的嵌入式实时操作系统VxWorks及其集成开发工具Tornado。系统开发调试工具采用Windriver公司生产的Vision-Ice仿真器。仿真器一端连接PC网口,另一端连接PowerPC440GP的JTAG接口。开发时首先调试PowerPC内核和外部DDR SDRAM,一旦工作正常,就可以通过仿真器下载RTOS到内存来辅助硬件调试。然后调试网口,如果网口工作正常,就可以脱离仿真器,利用Tornado提供的工具软件(例如WDB),通过网口线建立电路板与PC的通信机制,调试其他模块和开发应用程序。开发程序完成后,将正确的启动代码烧制到BootROM中,由BootROM引导程序通过ftp将VxWorks内核与应用程序下载烧制到Flash中。
VxWorks广泛流行的重要原因是它的可移植性,通过板级支持包BSP,VxWorks操作系统的应用代码可独立于硬件。系统移植时只需根据硬件平台修改BSP,不需要改变操作系统和应用程序。
5 VxWorks BSP文件结构与开发流程
在VxWorks中,BSP由一组与特定目标系统相关的文件组成。这些文件包括编译文件makefile、ROM初始化文件romInit.s、系统初始化文件sysAlib.s、配置文件config.h、目标板定义文件bspname.h、网络配置文件configNet.h、系统库文件sysLib.c、用户配置文件usrConfig.c、引导配置文件bootConfig.c、引导初始化文件bootlnit.C、串口文件sysSerial.c、以太网接口文件ibmEmacEnd.c等,BSP启动流程如图5所示。
5.1 建立开发环境
主要以开发板CPU的BSP文件为模板,在\tornado\target\config目录下创建用户的BSP目录bspname,把\tornado\target\config\all下的文件和BSP模板文件拷贝到该目录下。
5.2 修改模板文件
5.2.1 makefile
该文件通过命令行方式对创建映像文件进行控制,必须定义下列宏:
- CPU:PowerPC440GP;
- TOOL:GNU;
- TGT_DIR:目标板目录的路径,使用默认;
- TARGET_DIR:BSP目录名,自定义;
- VENDOR:目标生产商名,IBM;
- BOARD:目标板名,自定义;
- ROM_TEXT_ADRS:启动ROM的入口地址,本系统设为O×fff80100;
- ROM_SIZE:ROM大小,本系统为512 KB;
- RAM_LOW_ADRS:加载VxWorks的目标地址,本系统设为0x00010000;
- RAM_HIGH_ADRS:将引导ROM映像复制到RAM中的目标地址,本系统设为0x00C00000。
- 5.2.2 BSPname.h
该文件根据PowerPC440GP设置串行接口、时钟及I/O设备等,必须包含以下内容:
- 中断向量/优先级别;
- I/0设备地址;
- 设备寄存器各位的含义;
- 系统和附加时钟参数(最大和最小速率)。
- 5.2.3 config.h
- 该文件包含定义所有与PowerPC440GP目标板相关的组件。
- 设置缺省启动行
- RAM地址和大小:地址从0开始,64 MB大小设置ECC:使能;
- 设置是否支持MMU和Cache:支持Cache;
- 定时器是否使用外部时钟:否;
- 串口时钟定义:使用外部时钟;
- 串口默认通道:使用通道1;
- 包含网口:支持以太网接口;
- WDB默认通信方式:网口。
另外,注意ROM_TEXT_ADRS,ROM_SIZE,RAM_LOW_ADRS,RAM_HIGH_ADRS必须与makefile中的定义保持一致。
5.2.4 romInit.s
该文件是一端汇编语言的初始化代码,其中的romInit()函数是BootROM和基于ROM的Vx-Works映像的入口。需要做的工作有:
- 将相关寄存器清零和置位;
- 屏蔽中断:通过设置MSR寄存器中的CE位与EE位;
- 关闭数据、指令Cache;
- 初始化EBC总线寄存器:通过对bank寄存器的设置为EBC总线上的各种设备分配片选信号与地址空间;
- 初始化内存:对DDR SDRAM接口各寄存器进行配置,为板载内存与DIMM分配片选信号与地址空间。注意时序寄存器SDRAM0_TRl,SDRAM0_WRDTR等的配置应与内存模块的布线仿真结合起来;
- 初始化堆栈指针;
- 计算romStart()函数地址,然后跳转到该函数执行C语言代码,并不再返回。
5.2.5 用户配置文件usrConfig.c
其中的代码是VxWorks映像的主要初始化代码,而引导配置文件bootConfig.c中的代码是bootrom映像的主要初始化代码。bootInit.c是ROM初始化的第2阶段,RomInit()完成后跳转到此文件中的romStart(),该函数完成ROM映像所需要的解压缩和重定位工作。以上3个文件一般无须用户直接修改。
5.2.6 系统库文件syslib.c
该文件包含与特定目标系统相关的库函数,这些函数为操作系统和应用程序提供板级接口,使这些程序与硬件系统无关。该文件至少包含下列函数:sysModel,sysBspRev,sysHwInit,sysHwInit2和sys MemTop等,其中sysHwInit是本文件的核心,大部分硬件初始化工作都在这部分完成,本系统也可选择将包括串口,网口等硬件设备的初始化入口程序添加到该函数中,相关设备的驱动程序可作为子文件引入syslib.c。
5.3 创建VxWorks映像
根据具体需要在命令行环境下利用makefile创建各种镜像,也可以在Tornado集成环境下在Build菜单里选择Build Boot Rom来创建各种类型的BootROM。
6 结束语
介绍了一种新型高性能嵌入式处理器,并对以这种处理器为核心构建的网络服务器的硬件设计和软件开发流程做了详细说明。鉴于不同处理器的嵌入式系统设计具有一定的共性,本文可为其他类型的嵌入式系统开发提供一定的参考。