前言
目前的ARM处理器已经适合应用于数控系统。ARM处理器的成本低而且种类多。主频能够满足数控领域需求而且功耗比较低,无需使用风扇,提高了系统的可靠性。带有MMU的ARM处理器支持数控软件所需要的Linux操作系统,能够充分利用现有的数控软件资源。随着ARM处理器和FPGA的快速发展.给数控系统的设计提供了新的解决方案。ARM处理器用作系统的核心,可编程FPGA器件作为运动控制器。同时FPGA器件提供数控系统I/O等其它辅助电路。
随着PC/104成为工业控制领域的标准,已经被IEEE协会定义为IEEE-P996.1,PC/104总线提供的信号跟ISA总线一样,但是前者的机械规格不仅易于扩充而且更加坚同,适合应用于数控系统。但是这种总线结构是在Intel的x86体系结构上发展而来,目前x86对PC/104的支持比较好,而ARM对PC/104的支持还不完全统一,主要由于ARM和x86在体系结构、总线时序、电气特性以及指令集等方面的差异。而且不同的数控系统所需要的总线信号也不完全一样。本文将提出一种基于ARM处理器的数控系统上支持P0104总线的方案。
1 系统总体设计
数控系统中的ARM处理器采用Cirrus Logic的EP9315处理器,用EP9315的一个片选(nGCS3_PHBASE 0X30000000)作为PC104的地址范围,用地址ADDR24来控制MEMORY和10的方式的读写;用另一个片选(nGCS1_PHBASE 0X10000000)来查询PC104的中断号,当PC104有中断的时候,用一个中断通知CPU,然后CPU通过nGCS1这个地址来读中断号,判断出11个PCIl04中断源中来自哪个中断。由于EP9315和CPLD在制作工艺、电气性能上与PC/104总线有比较大的差别.因此需要使用74LVTH16245作为3.3-5V电气转换buffer用来调整电平模式。CPLD是基于乘积项的可编程逻辑器件.CPLD内部采用固定长度线连接各个逻辑块,因此具有较大的时间可预测性,引脚到引脚的延迟几乎是固定的,与逻辑设计无关,因此适合作为PC/104总线控制器。这里使用Altera的EPM7032用作PC/104总线控制器,用来完成EP9315读写时序向PC/104总线读写时序的转换。EP9315的数据总线和地址总线连到电平转换buffer,输出到PC/104总线上。因此PC/104总线设计的核心是保证EPM7032有正确的读写时序。原理图如图1所示:
图1 原理框图
2 PC/104总线控制器的实现
PC/104 总线介绍
PC/104采用模块化设计方法.通过自堆叠总线,省去了对底板或板卡插槽的要求。通过将多数信号的总线驱动电流减小至4mA.将元件数量和功耗降到最低。模块的104个信号线分布在两个总线连接器上,P1连接器有64个信号引脚,P2连接器有40个信号引脚。与ISA总线相比,PC/104总线将板卡的长宽比降至3.775英寸比3.550英寸(即96mm比90mm),克服了ISA总线机械规格的缺点。PC/104总线与PC/AT总线兼容,也定义了两种工作模式一8位和16位数据模式。对于8位数据模式,总线信号由板上的64引脚双排插座P1/J1提供,对于16位模式,增加了40引脚双排插座P2/J2。
ARM EP9315处理器介绍
EP9315处理器是Cirrus Logic推出的一款基于ARM920T内核的RISC处理器,主要面向工业计算机和手持设备等等。ARM920T是Harvard体系结构处理器,由ARM920TDMI、存储管理单元(MMU)和高速缓存3部分组成。有独立的16位指令cache和数据cache。ARM920T有5级流水线。EP9315工作频率为200M Hz,集成了2D图形加速器和协处理器,以及丰富的外设接口例如IDE控制器和PCMCLA控制器等,即使不使用额外的DSP芯片也能够支持相当多的外设。EP9315支持Linux。Microsofi Windows CE等操作系统。
PC/104总线控制器的设计
控制器的CPLD设计采用Altera公司的EPM7032.属于MAX7000可编程器件系列。MAX7000系列是高密度、高性能的CPLD,采用了Altera的第二代MAX架构,采用浮栅EEPROM设计。结构如图2所示:
图2 EPM7032的结构
结构中包括逻辑阵列模块(LAB)组成的阵列、可编程互连阵列口(PLA)和可编程I/O模块阵列。每个LAB包括36个输入端、16个输出端和16个宏单元,每个宏单元包括处理组合和时序运算的组合逻辑和触发器。PIA作为全局总线提供了多重LAB、专用输入端和I/O引脚之间的连接。PIA为逻辑单元的输出和LAB的输入提供了包括预计定时的完整连接。器件可以工作在3.3v。pin—to—pin的延迟tPD=6ms,工作频率可达151.5MHz,能够与EP9315的AMBA总线时钟频率相匹配。EPM7032支持多种设计输入,除原理图外还可以通过VHDL Veriiog HDL和Altera Hardware Description Language (AHDL)。Verilog HDL语言是一种硬件描述语言,能形式化地抽象描述电路的结构和行为,支持逻辑设计中层次与领域的描述,具有电路仿真与验证机制以保证设计的正确性,用于算法级、门级和开关级的建模。开发环境使用Altera的MAX+Plus。
总线控制器的实现与仿真
在PC/104总线内部,用一个信号INT1查询相关的中断信号,使用片选信号CS3和地址信号LADDR24和读写信号WR、RD选择MEM或者10的读写方式。相关代码如下:
assign INT1=(IRQ[3] || IRQ[4] || RQ[5] || IRQ[6] || IRQ[7] || IRQ[9] || IRQ[10] || IRQ[11] || IRQ[12] || IRQ[14] || IRQ[15]);
assign MEMW=(CS3 || WR || LADDR24);
assign MEMR=(CS3 || RD || LADDR24);
assign IOW=(CS3 || WR) || (~LADDR24);
assign IOR=(CS3 || RD) || (~LADDR24);
使用MAX+Plus部分仿真结果如图3所示。从波形上可以看出INTI能够检测出中断产生,能够检测到MEM和I/O读写请求。总线控制器把这些信号输入到ARM处理器,完成对PC/109总线读写的控制。
图3 读写时序仿真波形
3 Linux下的PC/104总线驱动程序的设计
在Linux中,由于有设备文件,所以才能使得用户非常方便的访问外部设备,Linux系统为外部设备提供一种标准接口,将外部设备视为一种特殊文件,可以像访问文件一样访问一个外部设备。Linux通常将设备分为i种基本类型:字符设备、块设备和网络设备。在基于ARM处理器的数控系统中把PC/104总线看作块设备。下面是PC/104代码的说明:
nGCS1_VBASE=ioremap((nGCS1_PHBASE).2);
nGCS3_VBASE=ioremap((nGCS3_PHBASE+BaseAddr+LADDR24),256);
config=inl(SMCBCR1);
config &=0xcfffffff; //set nGCSI 8-BIT
outl(config,SMCBCR1);
config=inl(SMCBCR1);
config=inl(SMCBCR3);
config &=0xcfffffff; //set nGCS3 8-BIT
eonfig 1=0x0000fbe0;
outl(config,SMCBCR3);
config=inI(SMCBCR3);
两部分比较主要一部分是初始化SMCBCR1和SMCBCR3。另一部分是:一个是PC/104的基地址,另一个是读PC/104中断的基地址。这两个要在初始化时就要给定:
nGCS1_VBASE=ioremap((nGCS_PHBASE),2);
nGCS3_VBASE=ioremap((nGCS3_PHBASE+BaseAddr+LADDR24),256);
其中uGCS1_VBASE为读中数的nGCS3_VBASE为PC/104MEM的基地址。用操作系统担供的函数outl、inl可操作寄存器。
4 结语
本文创新点:提出一种基于ARM EP9315处理器的数控系统上支持PC/104总线的方案.主要描述了ARM数控系统中的PC/104总线控制器的设计与实现,使用CPLD和Verilog HDL语言。实现了EP9315对PC/104总线读写信号的控制和中断处理。完成了Linux下的PC/104总线控制器的驱动程序.提供了基于ARM处理器的数控系统的PC/104总线解决方法.弥补了ARM处理器对于PC/104总线的支持不足缺点,使得ARM处理器能够更广泛的应用于数控领域。
责任编辑:gt
全部0条评论
快来发表一下你的评论吧 !