当前已经进入嵌入式系统全面应用时代,基于ARM处理器和嵌入式Linux的嵌入式系统以其设计灵活、软硬件可裁剪、性能优越、成本低等特点和优势,倍受设计者和使用者青睐。
其在低功耗、低成本应用领域确立了其市场领导地位;同时随着x86架构的不断成熟和x86处理器的应用范围越来越广,人们逐步开始认识到其本身架构的限制,在工业控制领域嵌入式ARM处理器将有望取代传统的X86处理器。
PCI04总线是一种近年来在国际上广泛流行的专门为嵌入式系统而定义的工业控制总线,被IEEE协会定义为IEEE-P996,该系列产品已广泛应用于通信设备、车辆导航、工程控制等各种领域。由于PC或PC/AT的主板和扩展卡的尺寸及功耗标准都太大,。ISA总线不能满足嵌入式系统的发展的需要。PC/104作为从。ISA总线转变而来的接口总线,主要是为了适应嵌入式系统发展的需要,但是这种早期的总线结构是建立在INTEL的x86架构之上的,在ARM体系结构下,还没有一个统一的标准可以提供对PC/104总线的支持,因为ARM在体系架构、总线时序、电气性能等方面和x86都有很大的区别。本文将提出一种在ARM处理器上支持PC/104总线的解决方案。
系统总体设计
系统的工作原理:PC/104总线上的1/O和MEMORY各16 MB空间用nGCS2和nGCS3选通,分别映射到的S3C24lO存储空间Bank2和Bank3的ROM/SRAM上。由于S3C24:10和CPLD在电平模式、制造工艺上都和PC/104总线标准有差异,故选用器件74LVHl62245做3.3~5 V电平转换器Buffer的方式来调整电气特性,进行TTL电平和LVTTL电平的转换,并增强驱动能力。PC/104总线上的8个中断请求信号IRQ[3:11]经bairer直接连接到S3C:2410的EINT[O:7];将S3C2410地址线SAddr[1:23]通过Buffer直接连接到Pc/104总线的Addr[1:19]和LAddr[17:23],.Addr0由控制器给出,当总线为8位数据传输时有效。由于复杂可编程器件CPLD的集成度高,与专用集成电路相比,具有设计灵活、开发周期短、设计制造成本低、大大节省了硬件资源优点,可选用他来做PC/104总线的控制器,主要是完成S3C2410读写时序向PC/104总线读写时序的转换,对输入控制信号译码,提供PC/104总线和S3C2410处理器的控制信号,同时产生PC/104所需要的时钟信号。S3C2410数据总线D[O:15]经CPLD输出到Buffer(Buffer上的数据传输方向由控制信号Data dir控制),连接到PC/104的数据总线上。因此总线控制设计的关键是保证控制器CPLD的时序的正确。
2 PC/104总线控制器的实现
2.1 PC/104总线简介
PC/104模块具有独特的堆叠式总线扩展方式、体积小、功耗低、可靠性高等特点,由J1/P1,64针单列双排插针或插孔,和J2/P2,40针单列双排插针或插孔组成,总共104根总线信号,PCI04因此得名;标准模块的机械尺寸是3.6X3.8 in,即96X90 lnln。当总线工作在16位的数据模式下,儿/P1和J2/P2引脚的信号都应有效,在8位数据模式下,只有J1/P1引脚信号有效,J2/P2上的信号无效。104个引脚的组成:20根地址线;7根锁存地址线;16根数据线;11个中断请求;32根控制线;14跟地和电源线;2个key;1个8 MHz的BCLK和1个14 MHz的OSC;总线的工作电压为5 V。PC/104总线的I/O读写时序如图2所示。
2.2 ARM$3C2410处理器简介
S3C2410是韩国三星电子公司的一款基入ARM920T内核的16/32位RISC嵌入式处理器,主要面向手持设备及高性价比、低功耗的应用,最高工作频率为203 MI-Iz。ARM920T核由ARM920TDMI、存储管理单元(MMU)和高速缓存3部分组成。其中MMU可以管理虚拟内存,高速缓存由独立的16 kB地址和16 kB数据高速Cache组成,他支持嵌入式Linux,Windows ce等嵌入式操作系统。S3C2410将系统的存储空间分成8组(Bank),每组的大小为128 M,共1 G。Bank0~Bank5的开始地址固定,用于ROM/SREM。Bank7的开始地址是Bank6的结束地址,灵活可变,其主要用于ROM/SRAM/SDRAM。S3C2410采用nGCS[7:0]8个通用的片选信号来选则这些组。
2.3 PC/104总线控制器的设计
本设计采用。XILINX公司XC95144XL的CPLD,共144个引脚,其中可编程的引脚数117个,满足PC/104总线控制器上输入输出控制信号数目的要求;器件正常工作电压3.3 V,I/O端口的负载电流可达24 mA,延迟时间tpD=5 ns,工作频率f=178 MHz,可与S3C2410的AHB总线的时钟频率HCLK匹配。VHDL是电子设计的主流硬件描述语言,具有很强的电路描述和建模的能力,从而大大简化了硬件设计的任务,提高了设计的效率和可靠性,并在语言的易读性和层次化结构化设计方面,表现了强大的生命力和应用潜力。Max+PlusⅡ界面友好,使用便捷。因此选择用VHDL语言编写有限状态机来实现PC/104总线控制器,通过Max+P1usⅡ开发工具进行逻辑波形验证。
2.3.1 控制器内部状态
在PC/104总线的设计中,设计的重点是总线控制器的实现,能否完成PC/104总线驱动,关键在于控制器能否正常运行。PC/104总线控制器的工作流程:控制器等待选通信号有效,如果nGCS有效则锁存地址并保持ARM总线状态,然后进行读写操作判断,最后把数据和相应得控制信号加在PC/104总线上,完成操作后释放ARM总线。
2.3.2 I/o空间读写逻辑仿真波形
本设计的有限状态机采用VHDL语言设计,主要完成PC/104总线控制器的状态图转换,从逻辑仿真波形上看:ARM读操作时,n0E信号有效(低电平),从总线上读人数据,同时使总线控制信号有效;写操作时,nWE信号有效(低电平),把数据直接写到总线上,同时也使总线控制信号有效,图5的仿真波形基本符合本设计的S3C24lO和PC/104总线读写时序要求。
3嵌入式Linux下的驱动程序开发
为了在Linux 2.6操作系统下实现本文所述的功能,必须为总线控制器提供一个驱动程序。在Linux中,所有的硬件设备都像常规文件一样看待,他们可以使用和操作文件相同的,标准的系统调用进行打开、关闭和读写。用户程序通过相应的系统调用来访问硬件设备,设备驱动程序的作用正是为这些系统调用提供接口。为了能对PC/104总线上的地址空间进行随机、连续访问,把PC/104总线设计成块设备。
设备驱动程序本质上说就是一组相关函数的集合。在驱动程序模块化编程中,首先需要调用入口函数im-modLde()完成设备驱动程序的初始化工作:利用函数
在系统中注册和PC/104相关的几个中断,关联中断服务例程,并设置中断等级;利用函数setexternal irq(int irq,int edge,int pulIup)设置中断的触发模式,和是否利用处理器的内部上拉;其中最重要的一个工作就是向内核注册设备,调用函数 ,注册成功后,该设备获得系统分配的主设备号、自定义的次设备号,并建立起与文件系统的关联;在本应用中只需要定义write()、read()两个文件操作,因此文件系统接口可定义为:
最后驱动程序卸载时调用出口函数Clearnup rood-ule(),通过函数
释放相应的资源。
4 结 语
本文重点描述对PC/104控制器的设计,从满足系统的时序要求出发,采用CPLD器件和VHDL语言完成对PC/104总线上信号的驱动,同时在嵌入式Linux环境下编写驱动程序,提供了一套完整的基于ARM嵌入式系统上实现PC/104总线的方案,该方案将在实践应用中进一步验证和完善。本文成功地把工业控制计算机技术中的嵌入式PC/104总线结构在S3C2410处理器上实现,该系统具有体积小、功耗低,克服了传统PC机的缺点;采用CPLD通过VHDL语言实现PC/104总线控制器,缩短开发的成本和周期,提高了开发的灵活性。