基于EPM7064的多串口管理系统设计
1 概述
本文引用地址:https://www.eepw.com.cn/article/20971.htm串行接口在数据通信中一直扮演着重要角色。他不仅没有因为时代的进步被淘汰,反而在性能上越来向其极限挑战。usb接口是当前pc机上的主流接口,但仍然有许多外设使用串口与pc机通信,尤其是在工业控制领域。普通pc机所提供的串口资源往往是不够的。
传统扩展多个串行口的方法是利用多个中断源,每个中断通常被分配给单一的设备。这是因为当多于1个的设备被设置成使用同一个特定中断时,系统不能辨认哪个设备使用中断线,所以就会产生混乱。但在嵌入式系统中,花费大量的中断源来扩展串口无疑是资源的浪费。针对这种情况,为了节省紧张的系统资源,本方案通过对cpld的设计,采用1个中断源高效管理多个串口的有效方法实现了将pc主机上的一个usb接口扩展为8个通用串口接口,同时保证了多个串口中断的无漏监测与服务。
2 系统硬件设计
本设计方案(参见图1)采用atmel公司的89c52单片机来控制串口到usb接口之间的数据收发工作,选用philips公司的usb接口芯片pdiusbd12实现单片机与usb器件之间的连接,多串口扩展以tl16c554芯片实现,并由一片cpld(altera的epm7064)实现高效多串口中断源管理,利用单一的中断源来管理多个扩展串口。在pc主机端,设计开发了wdm设备驱动程序对usb口进行虚拟管理,从而使得windows应用程序能以访问普通串口的方式访问串口服务器上的多个串口。

3 cpld设计
本设计中用cpld设计了译码电路、锁存电路、逻辑或电路、三态门电路、状态机电路。由于对宏单元和管脚的要求不是很多,因此选用altera epm7064,44脚,plcc封装。
3.1 译码电路
用cpld进行pdiusbd12的选址,2片tl16c554共8个口的选址,以及对cpld中一位寄存器的选址,共用到a3~a7以及do进行译码,译码设计图如图2所示。

(1) pdiusbd12的选址
由于po口为数据地址线,所以要经过地址锁存器,以及a7,a6一起连到一个138译码器上。因为pdiusbd12奇地址表示命令,偶地址表示数据,所以把2个地址接异或非门后再接到pdiusbd12的片选端。如图2上的cs2,其地址为0x7000,0x7001。
(2) tl16c554的选址
为了选中扩展的8个串口,将a3~a5连入另一个138译码器,将其译码为8个选通端连到每个芯片的片选上,然后用a6,a7,do的译码cs0(见图2)作为第二个138译码器的低使能端。其8个口的地址依次为0x0c000,0x0c800,0x0d000,0x0d800,0x0e000,0x0e800,0x0f000,0x0f800。
(3) 一位寄存器的选址
cpld内的一位寄存器的地址设定为0x0c001。
3.2 多串口中断源解决方案
其基本原理如图3所示。

rs232串口通过驱动芯片max202或max232转化成ttl电平,通过串口异步通信器件16c554输出中断请求,通过或门获得多个串口的中断请求,再通过cpld与中断控制器相连接。中断控制线intreq通过cpld主要是在cpld中做一个一位寄存器inten(如图4所示),用作中断允许位,并根据16c554的中断请求intreq和inten的状态来最终生成中断dly_irq,cpu将实时响应该中断请求。

(1) intreq为n个中断的或结果。
(2) cpu对inten只写,操作过程分3步:
①中断安装后设置inten=1;
②进入中断服务程序后cpu设置inten=0;
③退出中断服务程序的最后指令再将inten=1。
(3)中断响应的时序图,如图5所示。

(4)中断控制寄存器的状态图(描述8位状态机的转换)如图6所示。

本设计支持epm7064在线下载功能,其接口图如图8所示。


为实现主机可以如操作本机串口一样通过主机usb口对串口设备进行数据读取,主机端设备驱动程序需将串口服务器的8个串口对应到主机的8个虚拟串口上。在wdm设备驱动程序设计中,这样的功能可以通过在usb功能驱动程序上层加上一个过滤驱动层来实现。应用程序发送数据到虚拟串口,而过滤驱动程序则将虚拟串口中的数据转发给usb功能驱动程序,反之亦然。基于wdm的usb设备驱动程序分层结构如图9所示。

评论