基于ARM9和CPLD的输入输出系统设计

发布时间:2010-4-9 12:09    发布者:我芯依旧
关键词: CPLD , 输出 , 输入 , 系统设计
嵌人式丁业控制系统的突出特点是在高低温、高电磁辐射环境下的抗干扰性和可靠稳定性。和PLC系统相比。其明显的优点是处理速度快、方便进行工业以太网的组建、编程方便、通用性好,而且价格仅仅是PLC的几分之一,具有很好的发展前景。本论文主要论述了以EP9315和MAX2_EPM240为核心的嵌入式输入输出系统的设计。

1 系统构成

整个嵌入式输入输出系统分为嵌入式系统、应用模块(即输入输出模块)和转换模块三部分,总体结构如图1所示。

1.gif
图1系统结构框图

1.1 嵌入式系统

本设计选择Cirrus Logic公司高性能的ARM9嵌入式微处理器EP9315.该微处理器具有ARM920T内核所有的优异性能。丰富的集成外设接口包括以太网MAC、串口,2.0全速HOST USB、专用SDRAM通道的LCD接口、触摸屏接口等。

Cirrus logic公司为用户提供了基于该处理器的全功能开发板。配合Windows CE.net嵌入式操作系统,系统开发效率高、运行稳定,为工业控制提供了可靠的系统平台。基于定制的WinCE操作系统实现工业控制中应用模块的专用驱动,提高嵌入式系统的通用性。

本文所述系统应用了开发板丰富的集成外设接口。通过串口进行eboot下载;通过以太网进行操作系统内核和应用程序的下载,并实现以太网通信;HOST USB接鼠标方便用户操作;LCD屏实现显示,触摸屏接口实现面板触摸操作。

1.2转换模块的设计

转换模块用于将开发板上需要用到的信号线引出,主要包括数据线、地址线和部分I/O控制信号(如nWR,nRD,NCS3,nWAIT等)。在转换模块中主要用到了电平转换驱动芯片74LVXC4245,其作用包括:(1)改善信号的质量;(2)抗干扰;(3)实现电平转换;(4)提高EP9315管脚的驱动能力。

1.3基于CPLD的输入输出模块的设计

1.3.1输入输出模块的设计思想

在工业应用现场,输人/输出模块通常包括数字量输入模块、数字量输出模块、数字量输入/输出模块、模拟量输入模块、模拟量输出模块、模拟量输入/输出模块等。

考虑到不同应用系统复杂程度不同,因而对输入输出端口的需求也就不同。为了能根据实际需要灵活添加不同种类的输入输出模块,设计时采用了如下思想:

ARM9的数据总线、地址总线和控制总线同时和多个插槽相连接,并且给每个插槽赋予一个固定的地址,称为插槽地址,各类模块可插入任何一个插槽。

各类输入/输出模块均基于CPLD进行开发设计[6],实现对外界系统的检测与控制。但对于不同的输入输出应用系统而言,其输入信号以及输出信号特性各异,表现出复杂性。设计时必须考虑到上述复杂性,根据实际情况,对相应输入输出信号进行信号调理。为了保证输入输出模块和ARM9主控器连接的稳定性和快速性,采用了总线方式的扩展:将CPLD挂在ARM9的BANK3空间,连接11根地址线,16根数据线,以及相应的控制线(包括nRD、nWR、nCS3、nWAIT)。各类输入/输出模块总体设计框图可如图2表示。

2.gif
图2输入输出模块结构框图

信号条理电路的主要功能为:实现对各类输入信号的凋理,使之满足CPLD输入管脚的电气要求;实现对CPLD输出信号的调理,使之满足应用系统的电气要求。CPLD总线功能:通过各类总线建立CPLD与ARM9之19的信号联系,实现CPLD与ARM9之间的通信。

因各类模块可插入任何一个插槽,为了实现不同种类的模块的自动识别,通过硬件设计语言赋予每类模块一个ID码。ARM通过“读ID码地址”读取ID码,即可判断是何种模块。随后即可根据模块类型实行对应的操作。

1.3.2 CPLD的选用端口数据。

Altera公司的MAXII器件采用了全新的CPLD结构,比以往的MAX器件具有更高的性价比、更低的功耗、更大的容量,使其成为复杂控制应用的理想方案。考虑到输入输出模块的功能相对简单,不需要大量的复杂运算,本系统选用容量相对较小的EPM240进行设计。

1.3.3 CPLD的软件设计

为了通过ARM9的地址总线、数据总线和控制总线实现对输入输出模块的读写控制,必须根据ARM9的读写时序图对输入输出模块的CPLD进行硬件语言编程设计。

输入模块关键代码如下:

assign data_bus=((~(RDICS))&(address==baddr[10:5])&(haddr[4:0]==5'b00000))?16'b0000000011011111:16'bz;
assign data_bus=((~(RDICS))&(address==baddr[10:5])&(baddr[4:0]==57b00100))?dc24v_in:16'bz;

程序中第一个assign语句功能:当地址总线的低五位为5'b00000,即为“读模块ID码地址”,就向数据总线输出该模块的ID码。

第二个assign语句功能:当地址总线的低五位为5"b00100,即为“读模块数据地址”,就将模块输入端口数据读入数据总线。

输入模块Quatuttis II仿真结果如图3所示。从图中可以看出,当地址总线的低五位地址为5'b00100时,模块输入端口数据(de24v_in)被读入到数据总线(data_bus)。

3.gif
图3输入模块仿真时序图

同理,可进行输池模块设计,关键代码如下:

always @ (posedge pro_clk) begin
if((-WRITS))&(address==baddr [10:5])&(bad&[4:0]==5'00010))begin
mem_data[ i ]=data_bus;
i=i+1;
if((mem data [0]==mem_data[1])&(mem_data[1]==mem_data[2])&(mem_data[2]==
mem_data[3])) begin
relay_reg = mem_data[0];
end
end
end
assign relay = relay_reg;
assign led = ~relay_reg;
assign data_bus = ((~(RDICS))&(address==baddr[10:5])&(baddr[4:0]==5'b00000))?16'b0000000011011110:16'bz;

程序中alwavs语句功能:当地址总线的低五位为5'b00010,即为“写模块数据地址”,就将数据总线数据写入到寄存器mem_data[]。为了增强抗干扰能力,程序中采取了连续读取四次数据总线数据并判断是否一致,若一致,才更新模块输出端口数据。

程序中第三个assign语句功能:当地址总线的低五位为5'b00000,即为“读模块ID码地址”,就向数据总线输出该模块的ID码。

输出模块Quarutu。II仿真结果如图4所示。从图中可以看出,当地址总线的低五位为5'b00100时,数据总线(data_bus)被写入到模块输出端口(relay)。

4.gif
图4输出模块仿真时序图

2 系统软件设计

2.1驱动程序设计思想

输入输出模块驱动程序基于流接口驱动程序类型进行设计。驱动程序的设计一方面应根据实现功能考虑到物理地址的合理分配,另一方面应考虑到与应用程序的接口。下面就围绕这两个方面具体论述驱动程序的设计思想。

2.1.1物理地址的合理分配

对输入模块,包含有如下两种操作。(1)读lD码;(2)读取输入端口数据。对输出模块,包含有如下两种操作。(1)读ID码;(2)写数据至输出端口。

为了保证驱动程序的通用行,即是说,对插入某个插槽的模块,无论是是输入模块,还是输出模块,驱动程序结构是一样的。可对每个插槽分配三个物理地址,包括读取ID码地址(简称“ID地址”)、读取输人模块数据地址(简称“读地址”)、写数据至输出模块地址(简称“写地址”)。应用程序通过“ID地址”读取的ID码数据判断模块的类型,进而通过“读地址”对输入模块进行读操作,或是通过“写地址”对输出模块进行写操作。对输入输出模块的读写操作包含字操作、字节操作、位操作三种方式,可在驱动程序中通过“与运算和移位运算”变换实现。对每一插槽,三个物理地址可如表1分配:

表1应用模块物理地址分配
b1.gif

在初始化函数(IO_Init)中,通过函数VirtualAlloc()和VirtualCopy()把EP9315针对输入输I叶J模块的物理地址和操作系统的虚拟空间联系起来,实现地址映射。

2.1.2输入输出模块读写操作实现

操作输入输出模块的应用程序流程可简述如下[3]:发送“读模块ID命令码”->接收驱动程序返回数据(即模块ID码)->根据模块ID码判断模块类型(输入模块还是输出模块)->根据模块具备功能发相关命令码进行模块读操作或写操作(包括字操作、字节操作和位操作三种情况)。

驱动程序设计思路如下:在写函数(IO_WRITE)中实现功能为:接受命令码,并将命令码存入某指定变量一判断命令码是否是写命令码一若是就执行写操作(包括字操作、字节操作和位操作三种情况)。在读函数(IO_READ)中实现功能为:判断命令码是否是读命令码一若是就执行读操作并返回读取的数据(包括字操作、字节操作和位操作三种情况)。

2.1.3输入输出模块读写脉宽的调整

EP9315在WinCE操作系统下主频达到200MHz,总线频率为100MHz,外设时钟为50MHz,因而,EP9315发出的读写及使能信号脉宽不足50ns。可以通过改变EP9315的BANK3上的读写时序.使其能和CPLD交互。具体可通过设置应用模块地址空间存储空问读写特性寄存器SMCBCR3中等待时间位WST1和WST2实现。

若SMCBCR3的代码设置为:SMCBCR3=2000ffef实现功能为:设置nCS3数据宽度为32bits,读写脉宽为320ns。这种设置使得CPLD拥有较低的总线频率,满足对CPLD的读写时序要求。

3 小结

本文作者创新点是基于MAX2_EPM240进行了输入输出模块的硬件软件设计,在Windows CE.net操作系统下,实现了EP9315嵌入式系统对输入输出模块的控制,且可根据实际需要,灵活选用各类模块。该系统功耗低、稳定性好,适合工业控制中的运用。


作者:许弟建      来源:《微计算机信息》(嵌入式与SOC)2009年第3-2期
本文地址:https://www.eechina.com/thread-10283-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关在线工具

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表