单片机与一个PCI设备间通信的情况解析方案
来源:华强电子网 作者:—— 时间:2012-09-07 11:35
考虑到在不正常情况下,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 ABEL HDL程序设计
我们针对8位单片机控制PCI以太网卡进行了程序设计,CPLD器件选用ALTERA的MAX7000系列。针对以太网卡的特点在逻辑上进行了再次简化,最张程序将适配进EPM7128芯片中,并在实践中检验通过。
以太网卡仅支持对配置空间和I/O空间的读写操作,而且这两个空间的地址都可以设置在0xFF以内,所以可以只用一个pci_address0寄存器,其它地址都直接设为“0”;如果再限制,每次只往网卡写入一个字节数据,则可以只用一个pci_datas0寄存器,其它数值在具体操作时设成与pci_datas0寄存器的一样即可。
以下是ABEL HDL主要源码。其中16dmux是4~16位译码器,用于地址译码,选通CPLD内的寄存器;8dffe是8位的DFFE;abelcounter是8位移位计数器;mylatch8与mylatch1分别为8位与1位锁存器,而mylatchc是带清零1位锁存器;其它以“my”开始的变量都是三态缓冲器,以“out”开始的变量是三态节点,以“e”开始的变量是普通节点。这此在程序中不再声明。
SUBDESIGN abelpci
(
P2[7..3] : INPUT;
READ0 : INPUT
WRITE0 : INPUT;
P0[7..0] : BIDIR;
CLK : INPUT;
TRDY0 : INPUT;
AD[31..] : BIDIR;
CBE[3..0] : BIDIR;
IRDY0 : OUTPUT;
FRAME0 : OUTPUT;
)
VARIABLE
decoder : 16dmux;
mycounter : abelcounter;
pci_c
- •新品发布 | 96MHz主频 M0+内核低功耗单片机CW32L011产品介绍2025-05-07
- •宇凡微13万转暴力风扇无刷电机集成驱动方案,加速市场布局2024-07-11
- •大联大世平集团推出基于耐能Kneron产品的AI相机方案2023-06-15
- •大联大友尚集团推出基于CVITEK和SOI产品的网络摄像机(IPC)方案2023-02-16
- •武汉通信与电子信息技术研发基地(一期)项目封顶2022-05-27
- •尊湃通讯完成数亿人民币Pre-A轮融资,致力于提供全系列Wi-Fi芯片及解决方案2022-05-09
- •佳讯飞鸿携手华为签约莫桑比克铁路综合调度通信系统项目2022-03-23
- •培育壮大通讯通信产业 10个项目签约安徽马鞍山2021-02-24
- •AMD持续关注人员、地球和目标,推动技术进步,用心造福社会2020-12-15
- •2020年上半年全球通信设备市场:华为排名第一,份额是诺基亚两倍2020-09-10