📄 test.c
字号:
#include <stdio.h>
#include <dos.h>
#include <math.h>
#include <ver.h>
#include "Bottom.h"
#include "Bottom.c"
#define PCI_CONFIG_ADDRESS 0xcf8
#define PCI_CONFIG_DATA 0xcfc
#define IntDataBaseAddress 0xa00000L //10M+227,082,240, to save das data
#define TransPause 0x5a5a
typedef unsigned long int DWORD;
//#define loop_f
/*
#if defined(loop_f)
printf("this ver software will loop deadly when some error occur!\n");
#endif
*/
struct config_header//pci卡配置空间结构
{
unsigned int VID;
unsigned int DID;
unsigned int PCICMD;
unsigned int PCISTS;
unsigned long int RID_CLCD;
unsigned long int Addr0c;
unsigned long int BADR[6];
unsigned long int Res1[2];
unsigned long int EXROM;
unsigned long int Res2[2];
unsigned long int Addr3c;
};
unsigned char Comu_IntNo;//通讯卡中断号
unsigned short int Comu_IntVector;//通讯卡中断向量
unsigned long int Comu_CfgAddr;//通讯卡配置空间基地址
unsigned long int Comu_IOAddr;//通讯卡io空间基地址;
unsigned short int ComuCardVer;
unsigned long int CmuCtrlWord;//通讯控制字
unsigned long int ComuState;
unsigned short int IsIntOK;
unsigned long int IsTransfateErr;
unsigned long int TotalViewNums,StoreViewNums,SendViewNums,StoreViewInHV;
unsigned long int ReadDataPointer,WriteDataPointer;
unsigned long int ScanViewNums;
unsigned long int StoreViewNums_Bak,SendViewNums_Bak,StoreViewInHV_Bak;
unsigned long int WriteDataPointer_Bak,ReadDataPointer_Bak;
unsigned char IsDataTransPause;
char PauseState;//0:not pause, 1:放线终止或传输终止
char StopTrans;//收到主控台发送的传输暂停后为1,以阻止继续向主控台传递das数据
char GetPauseInfo;
unsigned char IsDataTrans;//如果在传递数据过程中,按面板则不会响应
//unsigned long int IntNums;
//unsigned long int ViewNumsCount; //view计数器
extern unsigned short int SendDiskDataByNet(unsigned char *);
extern unsigned short int SendSingleDataByNet(unsigned char *);
extern unsigned char ScanTypes;//扫描类型, 0 =das data retrans 5=pilot scan 6=simu flat scan
extern unsigned short int JumpViews;
extern unsigned long int HVSTS;//夹在数据中的高压状态
extern unsigned long int IntNums,IntNums_Bak;
extern unsigned short int Detector_F;
unsigned char FindComuCard(void)//寻找通信卡
{
struct config_header *PCIConfigHeader;
unsigned long int buffer[16];
unsigned char DeviceNumber,FunctionNumber;
unsigned char RegisterNumber;
unsigned int BusNumber;
unsigned long int temp;
unsigned char device_nums=0;
unsigned char VersionNum;
for(BusNumber=0;BusNumber<256;BusNumber++) {
for(DeviceNumber=0;DeviceNumber<32;DeviceNumber++) {
for(FunctionNumber=0;FunctionNumber<8;FunctionNumber++) {
temp=0x80000000L+((DWORD)FunctionNumber<<8)+
((DWORD)DeviceNumber<<11)+((DWORD)BusNumber<<16);
outpd(PCI_CONFIG_ADDRESS,temp);
temp=inpd(PCI_CONFIG_DATA);
if(temp!=0xffffffff) {
for(RegisterNumber=0;RegisterNumber<0x10;RegisterNumber++) {
temp=0x80000000L+((DWORD)RegisterNumber<<2)+
((DWORD)FunctionNumber<<8)+
((DWORD)DeviceNumber<<11)+((DWORD)BusNumber<<16);
outpd(PCI_CONFIG_ADDRESS,temp);
buffer[RegisterNumber]=inpd(PCI_CONFIG_DATA);
}
(DWORD*) PCIConfigHeader=buffer;
if(((PCIConfigHeader->VID)==0x10b5)&&((PCIConfigHeader->DID)==0x9054)) {
device_nums++;
VersionNum=(unsigned char)(PCIConfigHeader->RID_CLCD);
if(VersionNum==12) {
ComuCardVer=200;
printf("find communcation card ver 2.0 for Dual!\n");
}
else {
ComuCardVer=250;
printf("find communcation card for Dual!, ver is later than 2.0\n");
}
Comu_CfgAddr=buffer[5]&0xfffffffe;
Comu_IOAddr=buffer[6]&0xfffffffe;
Comu_IntNo=PCIConfigHeader->Addr3c&0x0ffL;
if(Comu_IntNo>7)
Comu_IntVector=Comu_IntNo-8+0x70;
else
Comu_IntVector=Comu_IntNo+8;
printf("Vendor ID is %x\n",PCIConfigHeader->VID);
printf("Device ID is %x\n",PCIConfigHeader->DID);
printf("Communcation card version number is %d\n",VersionNum);
printf("configration base address is %lx\n",Comu_CfgAddr);
printf("I/O space base address is %lx\n",Comu_IOAddr);
printf("int no is %d\n",Comu_IntNo);
break;
}
}
}
}
}
if(device_nums==1){
printf("find our pci Comu device(s)\n");
}
return device_nums;
}
void WriteCmd(unsigned long int cmd1,unsigned long int cmd2,unsigned long int cmd3,unsigned char IOAddr)
{
outpd(Comu_IOAddr,0x11112228);
//delay(2);
outpd(Comu_IOAddr + 0x04,0x33334444);
//delay(2);
outpd(Comu_IOAddr + 0x08,0x55556666);
}
int main(){
unsigned char device_nums = 0;
unsigned long int LedData = 0;
unsigned long int Mcmd1,Mcmd2,Mcmd3;
printf("this is PC104 test 2006-1-13\n");
device_nums = 0;
device_nums = FindComuCard();
if (device_nums == 1)
printf("find CPCI OK.2006-3-29 \n");
else
printf("find error.\n");
printf("-----------------------------------------\n");
WriteCmd(Mcmd1,Mcmd2,Mcmd3,0x00);
/*
while(1)
{
printf("Enter three data to Mcmd1,Mcmd2 and Mcmd3: \n");
scanf("%d", &Mcmd1);
scanf("%d", &Mcmd2);
scanf("%d", &Mcmd3);
printf("Mcmd1 = %d, Mcmd2 = %d, Mcmd3 = %d\n",Mcmd1,Mcmd2,Mcmd3);
WriteCmd(Mcmd1,Mcmd2,Mcmd3,0x00);
}
*/
//do{//test
// }while(1);
//printf("ri = %d\n",ri);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -