微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > FPGA和CPLD > 基于ARM9和CPLD的输入输出系统设计

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

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

1 系统构成

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


图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输入输出模块结构框图

信号条理电路的主要功能为:实现对各类输入信号的凋理,使之满足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输入模块仿真时序图

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

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输出模块仿真时序图

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top