现在位置:范文先生网>理工论文>电子通信论文>基于ARM7核处理器VxWorks系统BSP设计

基于ARM7核处理器VxWorks系统BSP设计

时间:2022-08-06 10:59:24 电子通信论文 我要投稿
  • 相关推荐

基于ARM7核处理器VxWorks系统BSP设计

  摘要:该文主要介绍了SAMSUNG公司的基于ARM7TDMI核S3C4510B微处理器,并详细介绍了利用该处理器所设计的嵌入式系统以及VxWorks操作系统下BSP(BoardSupportedPackage)的开发。
  关键词:ARM7TDMIS3C4510BVxWorksBSP
  
  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,EDODRAM,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(作为文件系统用)。
  
  3VxWorks操作系统下BSP构建
  
  在完成板上基本硬件的测试后,下面我就开始对vxWorks操作系统下BSP进行开发,开发前需要做一些准备工作,如准备开发工具等。
  
  ①开发工具用的是Tornado2.2forARM;
  
  ②参考资料有BSPKit、S3C4510BDataSheet;
  
  ③参考Tornado2.2forARM下自带的wrSBCArm7BSP;
  
  ④烧写程序采用编程器。
  
  通常在开发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
  
  将wrSBCArm7BSP拷贝一份并命名为4510BSP,接下来的工作就是修改该目录下的文件,从而得到自己的BSP。
  
  (2)修改MakeFile文件
  
  修改4510BSP目录下的makefile文件,修改如下几行:
  
  TARGET_DIR=4510BSP#changedbycaiyang
  
  VENDOR=CAI#changedbycaiyang
  
  BOARD=MyArmBoard#changedbycaiyang
  
  ROM_TEXT_ADRS=01000000#ROMentryaddress
  
  ROM_WARM_ADRS=01000004#ROMwarmentryaddress
  
  ROM_SIZE=00080000#numberofbytesofROMspace
  
  RAM_LOW_ADRS=00006000#RAMtext/dataaddress(bootrom)
  
  RAM_HIGH_ADRS=00486000#RAMtext/dataaddress(bootrom)
  
  MACH_EXTRA=
  
  注解:ROM_TEXT_ADRS:BOOTROM的入口地址。对大多数板来说,这就是ROM地址区的首地址,然而也有的硬件配置使用ROM起始的一部分地址区作为复位向量,因此需要根据此设置偏移量作为它的地址。这个偏移量因CPU结构而定。
  
  ROM_WARM_ADRS:BOOTROM热启动入口地址。它通常位于固定的ROM_TEXT_ADRS+4的地方。当需要热启动时,sysLib.c文件中sysToMonitor()函数代码明确的跳转到ROM_WARM_ADRS地址处开始执行。
  
  ROM_SIZE:ROM实际大小。
  
  RAM_LOW_ADRS:装载Vxworks的地址。
  
  RAM_HIGH_ADRS:将BootRomImage拷贝到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(targetserverfilesystem)下载
  
  要利用tsfs下载VxWorks,首先需要配置以下内容:
  
  ①在config.h文件中添加如下内容
  
  /*Serialportconfiguration*/
  
  #defineINCLUDE_SERIAL
  
  #undefNUM_TTY
  
  #defineNUM_TTYN_SIO_CHANNELS
  
  #undefCONSOLE_TTY
  
  #defineCONSOLE_TTY0
  
  #undefCONSOLE_BAUD_RATE
  
  #defineCONSOLE_BAUD_RATE38400
  
  /***WDB***/
  
  #ifdefSERIAL_DEBUG
  
  #defineWDB_NO_BAUD_AUTO_CONFIG
  
  #undefWDB_COMM_TYPE
  
  #undefWDB_TTY_BAUD
  
  #undefWDB_TTY_CHANNEL
  
  #undefWDB_TTY_DEV_NAME
  
  #defineWDB_COMM_TYPEWDB_COMM_SERIAL/*WDBinSerialmode*/
  
  #defineWDB_TTY_BAUD38400/*BaudrateforWDBConnection*/
  
  #defineWDB_TTY_CHANNEL1/*COMPORT#2*/
  
  #defineWDB_TTY_DEV_NAME"/tyCo/1"/*defaultTYCODRV_5_2devicename*/
  
  #endif/*SERIAL_DEBUG*/
  
  /*tsfsaddedbycaiyang*/
  
  #defineINCLUDE_TSFS_BOOT
  
  并修改引导行为
  
  #defineDEFAULT_BOOT_LINE\par"tsfs(0,0)host:vxWorksf=8h=169.254.72.67e=169.254.72.68u=caiyangpw=caiyang"
  
  注:串口1用来显示引导信息,相当于PC机中的显示器,串口2用来下载VxWorks和调试。同时串口2波特率不能太高,经测试115200好像不行。
  
  ②配置targetserver
  
  启动Tornado开发环境,选择Tool->targetserver菜单。在下拉菜单中选“targetserverfilesystem”并选中EnableFileSystem,然后目录指向Vxworks所在的地方。同时注意要把TornadoRegistry打开,这样配置完后点击Launch按钮即可连接成功,此后就可以通过串口2下载VxWorks和调试。
  
  
  
  一般情况下,我们首先调试好BSP,然后在调试网卡。所以在调试网卡前,我们需要用串口来下载VxWorks映像。
  
  至此,我们的BSP就开发完成。
  
  4结论
  
  在没有调试BSP的硬件工具如仿真器的时候,我们只能通过点灯或者串口输出来定位程序执行的正确性。这大大增加了调试
  
  
  
  难度和进程。对于BSP开发,一般需要从一个模板来修改。BSP开发的正确性直接影响到VxWorks系统运行的稳定性。
  
  

【基于ARM7核处理器VxWorks系统BSP设计】相关文章:

基于Vxworks实时操作系统的串口通信程序设计与实现08-19

基于Client/Server 的课件系统的设计与实现04-12

基于Verilog HDL设计的自动数据采集系统04-12

浅谈基于数字星球系统的地理教学设计08-20

基于Geode TMGX1的嵌入式系统设计04-12

基于MATLAB 的自动控制原理实验仿真系统的设计04-10

基于ARM核的AT75C220及其在指纹识别系统中的应用08-19

基于企业系统观的成本分析08-17

《核舟记》 设计08-16

《核舟记》.设计.08-16