单片机与一个PCI设备间通信的情况解析方案
来源:华强电子网 作者:—— 时间:2012-09-07 11:35
实际上在写PCI设备时,也可以从pci_data中得到返回数据。这个数据必须等于往PCI设备写的数据,原因参见ABEL HDL设计部分。利用这一点可以进行差错检验和故障判断,视具体应用而定。
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!");
}[NextPage]本文相关DataSheet:MAX7000 EPM7128
地址周期时的总线命令,PCI_cbe[7~4]保存数据周期时的字节使能命令;pci_data0~pci_data3保存从PCI设备返回的数据;pci_request是PCI总线读写操作状态寄存器,用于向单片机返回一些信息。当单片机往pci_cbe寄存器写入一个字节的时候,会复位CPLD中的状态机,触发CPLD进行PCI总线的读写操作;单片机则通过查询pci_request寄存器得知读写操作完成,再从pci_data寄存器读出PCI设备返回的数据。
CPLD中状态机的状态转移图如图3所示。每一个状态对应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位。
- •新品发布 | 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