基于单片机与PCI接口设计解决方案

发布者:MysticJourney最新更新时间:2011-11-05 关键字:单片机  PCI接口 手机看文章 扫描二维码
随时随地手机看文章

      8位单片机在嵌入式系统中应用广泛,然而让它直接与PCI总线设备打交道却有其固有缺陷。8位单片机只有16位地址线,8位数据端口,而PCI总线2.0规范中,除了有32位地址数据复用AD[3~0]外,还有FRAME、IRDY、TRDY等重要的信号线。让单片机有限的I/O端口来直接控制如此众多的信号线是不可能的。一种可行的方案就是利用CPLD作为沟通单片机与PCI设备间的桥梁,充分利用CPLD中I/O资源丰富、用户可自定制逻辑的优势,来帮助单片机完成与PCI设备间的通信任务。

1 PCI接口设计原理

1.1 PCI总线协议简介

 

      这里只讨论PCI总线2.0协议,其它协议仅仅是在2.0的基础上作了一些扩展,仅就单片机与PCI设备间的通信来说,意义不大。PCI总线是高性能局部总线,工作频率0~33MHz,可同时支持多组外围设备。在这里,我们只关心单片机与一个PCI设备间通信的情况,而且是以单片机与CPLD一方作为主控方,另一方作为PCI从设备。这样做的目的是为了简化问题,降低系统造价。

      PCI总线上信号线虽然多,但并不是每个信号都要用到。实际上PCI设备也并不会支持所有的信号线,比如错误报告信号PERR与SERR在网卡中就不支持。我们可以针对具体的应用选择支持其中部分信号线,还有一些信号线可以直接连电源或接地。下面简单介绍一下常用信号线的功能。

      AD[31~0]:地址数据多路复用信号。在FRAME有效的第一个周期为地址,在IRDY与TRDY同时有效的时候为数据。

      C/BE[3~0]:总线命令与字节使能控制信号。在地址中传输的是总线命令;在数据期内是字节使能控制信号,表示AD[31~0]中哪些字节是有效数据。以下是总线命令编码的说明:

                  C/BE[30]# 命令类型说明C/BE[30]# 命令类型说明

                  0 0 0 0    中断应答     1 0 0 0    保留

                  0 0 0 1    特殊周期     1 0 0 1    保留

                  0 0 1 0    I/O读        1 0 1 0    配置读

                  0 0 1 1    I/O写        1 0 1 1    配置写

                  0 1 0 0    保留         1 1 0 0    存储器多行读

                  0 1 0 1    保留         1 1 0 1    双地址周期

                  0 1 1 0    存储器读     1 1 1 0    存储器一行读

                  0 1 1 1    存储器写     1 1 1 1    存储器写并无效

      PCI总线上所有的数据传输基本上都由以下三条信号线控制。
FRAME:帧周期信号。由主设备驱动,表示一次访问的开始和持续时间,FRAME有效时(0为有效,下同),表示数据传输进行中,失效后,为数据传输最后一个周期。

      IRD:主设备准备好信号。由主设备驱动,表示主设备已经准备好进行数据传输。

      TRDY:从设备准备好信号。由从设备驱动,表示从设备已经准备好进行数据传输。当IRDY与TRDY同时有效时,数据传输才会真正发生。

      另外,还有IDSEL信号用来在配置空间读写期间作为片选信号。对于只有一个PCI从设备的情况,它总可以接高电平。IDSEL信号由从设备驱动,表示该设备已成为当前访问的从设备,可以不理会。

      在PCI总线上进行读写操作时,PCI总线上的各种信号除了RST、IRQ、IRQC、IRQ之外,只有时钟的下降沿信号会发生变化,而在时钟上升沿信号必须保持稳定。

1.2 CPLD设计规划

      出于对单片机和CPLD处理能力和系统成本的考虑,下面的规划不支持PCI总线的线性突传输等需要连续几个数据周期的读写方式,而仅支持一个址周期加一个数据周期的读写方式。对于大部分应用而言,这种方式已经足够了。图1是经过简化后的PCI总线读写操作时序。

      在CPLD内设有13个8位寄存器用来保存进行一次PCI总线读写时所需要的数据,其中pci_address0~pci_address3是读写时的地址数据;          

 简化的pci写操作时序

图1 简化的PCI写操作时序

      pcidatas0~pci_datas3是要往PCI设备写的数据;pci_cbe[3~0]保存地址周期时的总线命令;pci_cbe[7~4]保存数据周期时的字节使能命令;pci_data0~pci_data3保存从PCI设备返回的数据;pci_request是PCI总线读写操作状态寄存器,用于向单片机返回一些信息。当单片机往pci_cbe寄存器写入一个字节的时候,会复位CPLD中的状态机,触发CPLD进行PCI总线的读写操作;单片机则通过查询pci_request寄存器得知读写操作完成,再从pci_data寄存器读出PCI设备返回的数据。

      CPLD中状态机的状态转移图如图2所示。每一个状态对应FRAME与IRD信号的一种输出,而其它输入输出信号线可由这两个信号线和pci_cbe的值及TRDY的状态决定。当FRAME为有效时,AD[31~0]由pci_address驱动,而C/BE[3~0]由pci_cbe低4位驱动;当IRDY有效时,C/BE[3~0]视总线命令,要么由pci_cbe高4位驱动,要么设为高阻态,而AD[31~0]在pci_cbe[0]为“0” (PCI读命令)时,设为高阻态,而在pci_cbe[0]为“1” (PCI写命令)时由pci_datas驱动。另外一方面,一旦TRDY信号线变为低电平,AD[31~0]线上的数据被送入pci_data寄存器,而C/BE[3~0]线上的数据被送入pci_request寄存器的低4位。

状态转移图

图2  状态转移图 [page]

      考虑到在不正常情况下,PCI设备不会对PCI总线作出响应,即TRDY不会有效,为了不使状态机陷入状态S2的僵持局面,另外增设了一个移位计数器mycounter。当IRD信号有效时,计数器开始计数。计数溢出之后,不论PCI总线操作是否完成,状态机都会从状态S2转移到状态S3,即结束PCI总线操作。当TRDY有效时,会立即置位mycounter.cout。

      PCI总线操作是否正确完成,可查询pci_request的最高位是否为“1”,而IRDY与FRAME的值可分别查询pci_request的第4位和第5位。这两位反映了PCI总线操作所处的状态,两位都为“1”时可以认为PCI总线操作已经完成。在实践中,如果单片机的速度不是足够快的话,可以认为PCI总线操作总是即时完成的。

2 PCI设计接口实现

2.1 CPLD VHDL程序设计

      我们针对8位单片机控制PCI以太网卡进行了程序设计,CPLD器件选用Xilinx的XC95216系列。针对以太网卡的特点在逻辑上进行了再次简化,最终程序将适配进XC95261芯片中,并在实践中检验通过。

     以太网卡仅支持对配置空间和I/O空间的读写操作,而且这两个空间的地址都可以设置在0xFF以内,所以可以只用一个pci_address0寄存器,其它地址都直接设为“0”;如果再限制,每次只往网卡写入一个字节数据,则可以只用一个pci_datas0寄存器,其它数值在具体操作时设成与pci_datas0寄存器的一样即可。

2.2 单片机PCI读写C语言程序设计

      在CPLD在帮助下,单片机读写PCI设备就变得相当简单。首先,将pci_cbe等寄存器都声明为外部存储器变量,并根据CPLD的设计指定地址。然后,传递适当的参数给以下两个读写子函数,即可完成对PCI设备配置空间、I/O空间、存储器空间的读写操作。从PCI设备的返回数据存放在全局变量savedata中。

 

      实际上在写PCI设备时,也可以从pci_data中得到返回数据。这个数据必须等于往PCI设备写的数据。利用这一点可以进行差错检验和故障判断,视具体应用而定。

    bdate unigned char request;

            sbit IRDY0=request^4;

            sbit FRAME0=request^5;

           sbit VALID=request^7;

            void readpci(unsigned char addr,unsigned char cbe){

            pci_address0=addr;

            pci_cbe=cbe;

            request=pci_request;

            while(!IRDY0 & FRAME0)) request=pci_request;

            savedata0=pci_data0;

            savedata1=pci_data1;

            savedata2=pci_data2;

            savedata3=pci_data3;

            if(!VALID)printf("Data read is invalid! ");

            }

            void writepci(uchar addr,uchar value0,uchar cbe){

            data uchar temp;

            pci_address0=addr;

            pci_datas0=value0;

            pci_cbe=cbe;

            request=pci_request;

            while(!(IRDY0 & FRAME0)) request=pci_request;

            if(!VALID)printf("Data write is invalid!");

            }

3 结论
        用CPLD实现单片机与PCI总线接口的并行通信,电路结构简单、体积小,1片CPLD芯片足够,并且控制方便,实时性强,通信效率高。本设计方法已成功地应用于作者开发的各种数据采集系统中,用作单片机与PC104之间的并行数据通信,效果非常理想。

 

关键字:单片机  PCI接口 引用地址:基于单片机与PCI接口设计解决方案

上一篇:使用SPCE061A单片机的二级倒立摆控制系统
下一篇:基于单片机软核的SOPC系统设计与实现

推荐阅读最新更新时间:2024-03-16 12:45

基于MCU+CPLD变压器测试系统的设计与实现
1 引言   BX型信号变压器,BG型轨道变压器和ZG型硅整流器作为铁路信号电器设备的前端,其工作的稳定性、准确性直接关系到行车安全,变压器的可靠检测是严抓质量的第一步,对于生产厂家而言,测试流程不允许抽样,且测试结果应留档。本套测试系统用来测试铁路变压器的各种要求参数,包括原边空载电流、次边空载电压、次边带载电压电流,变压器绝缘电阻、原边电压频率,测量结果精度要求3%,测试系统分为上下位机两大部分,下位机运用智能仪表的设计思想,在MCU和CPLD控制基础上对各种要求测试参数分别进行自动测试,上位机上采用VC++6.0编写软件实现串口通讯,归类统计并判断是否合格,存储打印结果,系统满足操作简单可靠,提高效率,减少误差。   2
[模拟电子]
基于<font color='red'>MCU</font>+CPLD变压器测试系统的设计与实现
基于AVR单片机的ISP1362OTG设计
   0 引言   随着PDA、移动电话、数码相机、打印机等消费类产品的普及,用于这些设备与电脑、或设备与设备之间的高速数据传输技术越来越受到人们的关注。以往以计算机为核心的数据传输结构,非常不利于USB,总线在嵌入式行业的应用,也不适用于野外作业,而OTG技术的推出则可实现在没有PC的情况下,设备与设备之间的数据传输,它拓展了USB技术的应用范围。本文采用的设计方案是基于Philips公司的ISP1362 OTG控制芯片,参照最新的USB OTG技术规范,设计了一种遵循USB协议的主/从机系统。    1 ISP1362芯片的内部结构   Philips公司的ISP1362是一款符合USB 2.0总线协议的接口芯片,内部有
[单片机]
基于EFM32TG840F16 室内甲醛检测仪设计
甲醛是一种重要的化工原料和有机溶剂,广泛使用于家庭装修的材料中。过量甲醛气体,将诱发疾病甚至致癌,直接危害着人们的身体健康和生命安全。本检测仪采用32 位超低功耗EFM32TG840F16 微处理器 和高灵敏度甲醛传感器CH20/S-10,实现甲醛浓度的信号处理和采样,系统外接通讯接口及必要的扩展功能模块,构建智能化、多功能的检测系统。 1 系统硬件设计 甲醛检测 仪硬件主要由单片机主控系统、甲醛 传感器 接口、液晶显示(LCD)、功能键盘、数据存储、打印和报警输出等功能模块构成。系统硬件结构框图(见图1)。 图1: 系统功能框图 该系统采用32 位EFM32TG840F16 单片机作为主控核心,内嵌16KB F
[测试测量]
基于EFM32TG840F16 室内甲醛检测仪设计
单片机与单板机在组成上各有什么特点?
单片机与单板机在组成上各有什么特点? 答:单片机与单板机最大的不同在于系统组成。 单片机是在一块集成电路芯片上集成有CPU、程序存储器、数据存储器、输入/输出接口电路、定时/计数器、中断控制器、模/数转换器、数/模转换器、调制解调器等部件。 单板机是把微型计算机的整个功能体系电路(CPU、ROM、RAM、输入/输出接口电路以及其他辅助电路)全部组装在一块印制电路板上,再用印制电路将各个功能芯片连接起来。
[单片机]
采用MSP430FR4xx微控制器实现红外遥控的方案设计
红外遥控采用红外(IR)光来传送信息。发射器MCU的调制信号控制IR LED发射红外光。调制能够帮助接收器把需要的信号与所有其他的红外噪声源区分开来。调制的实现过程是用带有有效信息的包络信号对载波信号(通常是一个具有较高频率的方波)进行调制。 接收器采用光电二极管把IR光转换为电流。通常使用跨阻抗放大器将电流转换为电压;在解调前,该电压将通过一个增益放大器和滤波器。载波信号在解调过程中去除。解调信号可直接连接至接收器的MCU用于解码。 红外遥控调制和编码理论 所有的新式红外遥控设计均采用数字调制。两个基本的数字调制技术是幅移键控(ASK)和频移键控(FSK)。ASK通过改变载波幅度来表示逻辑1和0,而FSK则采用两种不同的
[单片机]
采用MSP430FR4xx<font color='red'>微控制器</font>实现红外遥控的方案设计
STM8单片机基本硬件线路设计
  其实STM8可以不需要晶振跟复位电路,但是为了最小系统能够稳定运行,所以最好增加外部电路。 ● STM8复位电路设计   STM8单片机内置上电复位(POR),所以,STM8单片机可以不设外部上电复位电路,依然可以正常复位,稳定工作。 若是系统需要设置按键复位电路,那么注意,STM8单片机是低电平复位,如下图,设计按键复位电路: ● STM8震荡电路设计 STM8单片机内置RC振荡电路。出厂时,未进行时钟源设置的STM8,其时钟源使用的是内部16M高速RC振荡器,然后经过8分频则是2M频率。 通过程序对寄存器的设置,可以设置MCU的内部RC振荡频率。例如:4M、8M等。不过,内置RC振荡,在一致性方面存在差异,它因生
[单片机]
STM8<font color='red'>单片机</font>基本硬件线路设计
利用SimpleLink™ MCU平台加速产品扩张并实现软件投资最大化
德州仪器(TI)今日宣布推出其全新的SimpleLink™ 微控制器(MCU)平台。通过将一套稳健耐用的硬件、软件和工具在单一开发环境中集成,该平台可加快产品扩张的进程。基于驱动、框架和数据库等共享基础,SimpleLink MCU平台全新的软件开发套件(SDK)以100%的代码重用率实现了可扩展性,从而缩短了设计时间,并允许开发人员在不同的产品中重复利用此前的投资。由于能够从业内最广泛的、基于ARM®的32位有线和无线MCU中任意选择,物联网(IoT)和工业产品可以轻松满足随时改变的设计或应用需求。 增强安全性的全新Wi-Fi® 产品加入SimpleLink MCU产品组合 为了扩展SimpleLink MCU产品组合中的器
[单片机]
微控制器驱动压电蜂鸣器的改进
本文主要针对如何用一只微控制器以大交流电压驱动一个压电蜂鸣器,它使用了一个四MOSFET的电路,与微控制器的两个I/O引脚连接(参考文献1)。以下是本文对这个电路的修改扩充,能节省下一只微控制器的I/O引脚。Q4的栅极连接到Q2的漏极,而不是第二个I/O引脚(图)。微处理器在I/O引脚施加一个高逻辑电平,使Q2导通,将Node A拉至低逻辑电平。这个动作打开Q3,关闭Q4。Node B上的电压变为15V,Q1关闭。压电元件上的电压现在为15V。 一只微控制器I/O引脚驱动这个电路,在压电蜂鸣器两端产生一个交流电压 然后,微控制器将I/O引脚切换为低,Q2关闭。Q1也关闭,因此Node A通过上拉电阻R1,缓慢地升至高逻辑电
[单片机]
<font color='red'>微控制器</font>驱动压电蜂鸣器的改进
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
502 Bad Gateway

502 Bad Gateway


openresty
设计资源 培训 开发板 精华推荐

502 Bad Gateway

502 Bad Gateway


openresty
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
随便看看
    502 Bad Gateway

    502 Bad Gateway


    openresty
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
502 Bad Gateway

502 Bad Gateway


openresty