⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commands.cpp

📁 linux下vme总线驱动代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
 *------------------------------------------------------------------------mjw-*/void TestDMA(char *b,int l){  int num;  unsigned int vme_pnt,len,n,x;  char buf[16];  num = sscanf(b,"%x %x",&vme_pnt,&len);  if (num == 0) {    vme_pnt = 0x8000;    len     = 16;    num     = 2;  }  if (num != 2) {    printf("Usage: TestDMA offset len");    printf("  This will read len bytes via DMA from address offset");  } else {    printf("Read Test.");    ioctl(vme_handle,IOCTL_SET_MODE,MODE_DMA);    lseek(vme_handle,vme_pnt,SEEK_SET);    n = read(vme_handle,buf,len);    ioctl(vme_handle,IOCTL_SET_MODE,MODE_PROGRAMMED);    for (x=0;x<n;x++) {      if (x % 16 == 0)        printf("%08X: ",x);      if (x % 16 == 8)        printf("- ");      printf("%02X ",(unsigned char)buf[x]);      if (x % 16 == 15)        printf("\n");    }//    printf("Write Test.");//    ioctl(vme_handle,IOCTL_SET_MODE,MODE_DMA);//    lseek(vme_handle,vme_pnt,SEEK_SET);//    write(vme_handle,buf,len);//    ioctl(vme_handle,IOCTL_SET_MODE,MODE_PROGRAMMED);  }}/*------------------------------------------------------------------------------ * TestProgrammed * *------------------------------------------------------------------------mjw-*/void TestProgrammed(char *b,int l){  int num;  unsigned int vme_pnt,len, n, x;  char buf[16];  num = sscanf(b,"%x %x",&vme_pnt,&len);  if (num == 0) {    vme_pnt = 0x8000;    len     = 16;    num     = 2;  }  if (num != 2) {    printf("Usage: TestDMA offset len");    printf("  This will read len bytes via DMA from address offset");  } else {    printf("Read Test.");    ioctl(vme_handle,IOCTL_SET_MODE,MODE_PROGRAMMED);    lseek(vme_handle,vme_pnt,SEEK_SET);    n = read(vme_handle,buf,len);    for (x=0;x<n;x++) {      if (x % 16 == 0)        printf("%08X: ",x);      if (x % 16 == 8)        printf("- ");      printf("%02X ",(unsigned char)buf[x]);      if (x % 16 == 15)        printf("\n");    }    printf("Write Test.");    ioctl(vme_handle,IOCTL_SET_MODE,MODE_PROGRAMMED);    lseek(vme_handle,vme_pnt,SEEK_SET);    write(vme_handle,buf,len);  }}/*------------------------------------------------------------------------------ * TestRead  * *------------------------------------------------------------------------mjw-*/void TestRead(char *b,int l){  unsigned int pnt,len,x,n,num;  unsigned char block[1024];  num = sscanf(b,"%x %x",&pnt,&len);  if (num != 2) {    len = 16;    pnt = 0;  }  pnt += FixedAdder;  if (ValidAddress(pnt)) {    lseek(vme_handle,pnt,SEEK_SET);    n = read(vme_handle,block,len);    if (n) {      for (x=0;x<n;x++) {        if (x % 16 == 0)          printf("%08X: ",x+pnt);        if (x % 16 == 8)          printf("- ");        printf("%02X ",block[x]);        if (x % 16 == 15)          printf("\n");      }    } else {      printf(" Read Failed.\n");    }      printf("Test Read Done..\n");  }}/*------------------------------------------------------------------------------ * TestWrite  * *------------------------------------------------------------------------mjw-*/void TestWrite(char *b,int l){  long pnt,num,x;           int error;  num = sscanf(b,"%lx",&pnt);  if (num != 1) {    pnt = 0;  }  pnt += FixedAdder;  if (ValidAddress(pnt)) {    for (x=0;x<16;x++) {      wb(pnt+x,0xAB,&error);    }      printf("Test Write Done..\n");  }}/*----------------------------------------------------------------------------- * regs  * *------------------------------------------------------------------------mjw-*/void regs(char *b,int l){  unsigned int val;  unsigned int temp;  printf("Registers:\n");  val = ReadUniReg(LMISC);  printf("  LMISC    = %08X\n",val);  temp = (val & 0xF0000000) >> 28;  if (temp == 0)    printf("    CRT    = Disabled\n");  else if (temp == 1)    printf("    CRT    = 128us\n");  else if (temp == 2)    printf("    CRT    = 256us\n");  else if (temp == 3)    printf("    CRT    = 512us\n");  else if (temp == 4)    printf("    CRT    = 1024us\n");  else if (temp == 5)    printf("    CRT    = 2048us\n");  else if (temp == 6)    printf("    CRT    = 4096us\n");  else if (temp == 7)    printf("    CRT    = Reserved\n");  temp = (val & 0x0F000000) >> 24;  if (temp == 0)    printf("    CWT    = Disabled\n");  else if (temp == 1)    printf("    CWT    = 16 PCI Clocks\n");  else if (temp == 2)    printf("    CWT    = 32 PCI Clocks\n");  else if (temp == 3)    printf("    CWT    = 64 PCI Clocks\n");  else if (temp == 4)    printf("    CWT    = 128 PCI Clocks\n");  else if (temp == 5)    printf("    CWT    = 256 PCI Clocks\n");  else if (temp == 6)    printf("    CWT    = 512 PCI Clocks\n");  else if (temp == 7)    printf("    CWT    = Reserved\n");  val = ReadUniReg(LSI0_CTL);  printf("  LSIO_CTL = %08X\n",val);  temp = (val & 0x80000000) >> 31;  if (temp == 0)    printf("    EN     = Disabled\n");  else if (temp == 1)    printf("    EN     = Enabled\n");  temp = val & 0x40000000;  if (temp)    printf("    PWEN   = Enabled\n");  else    printf("    PWEN   = Disabled\n");  temp = (val & 0x00C00000) >> 22;  if (temp == 0)    printf("    VDW    = 8 bit\n");  else if (temp == 1)    printf("    VDW    = 16 Bit\n");  else if (temp == 2)    printf("    VDW    = 32 Bit\n");  else if (temp == 3)    printf("    VDW    = 64 Bit\n");  temp = (val & 0x70000) >> 16;  if (temp == 0)    printf("    VAS    = A16\n");  else if (temp == 1)    printf("    VAS    = A24\n");  else if (temp == 2)    printf("    VAS    = A32\n");  else if (temp == 3)    printf("    VAS    = Reserved\n");  else if (temp == 4)    printf("    VAS    = Reserved\n");  else if (temp == 5)    printf("    VAS    = CR/CSR\n");  else if (temp == 6)    printf("    VAS    = User 1\n");  else if (temp == 7)    printf("    VAS    = User 2\n");  temp = (val & 0xC000) >> 14;  if (temp == 0)    printf("    PGM    = Data\n");  else if (temp == 1)    printf("    PGM    = Program\n");  else if (temp == 2)    printf("    PGM    = Reserved\n");  else if (temp == 3)    printf("    PGM    = Reserved\n");  temp = (val & 0x3000) >> 12;  if (temp == 0)    printf("    SUPER  = Non-Privileged\n");  else if (temp == 1)    printf("    SUPER  = Supervisor\n");  temp = (val & 0x0100) >> 8;  if (temp == 0)    printf("    VCT    = Single Cycles Only\n");  else if (temp == 1)    printf("    VCT    = Block Transfers OK\n");  temp = (val & 0x03);  if (temp == 0)    printf("    LAS    = PCI Bus Memory Space\n");  else if (temp == 1)    printf("    LAS    = PCI Bus I/O Space\n");  else if (temp == 2)    printf("    LAS    = PCI Bus Type 1 Config Space\n");  else if (temp == 3)    printf("    LAS    = Reserved\n");  printf("  LSIO_BS  = %08X\n",ReadUniReg(LSI0_BS));  printf("  LSIO_BD  = %08X\n",ReadUniReg(LSI0_BD));  printf("  LSIO_TO  = %08X\n",ReadUniReg(LSI0_TO));}  /*------------------------------------------------------------------------------ *  vmespace1 * *------------------------------------------------------------------------mjw-*/void vmespace1(char *b,int l){  int num,temp;  num = sscanf(b,"%x",&temp);  if (num == 0) {    printf("  VME Address Space: ");    if (VMEspace == 1) {      printf("A16\n");    } else if (VMEspace == 2) {      printf("A24\n");    } else if (VMEspace == 3) {      printf("A32\n");    }  } else if (num == 1) {    if (temp == 1) {      printf("Setting to A16\n");//      vmespace(VME_A16);    } else if (temp == 2) {      printf("Setting to A24\n");//      vmespace(VME_A24);    } else if (temp == 3) {      printf("Setting to A32\n");//      vmespace(VME_A32);    } else      printf("Invalid Value for VMEspace\n");  } else {    printf("\nUsage: vmespace space\n");    printf("  where if space = 1, VME Address Space = A16\n");    printf("  where if space = 2, VME Address Space = A24\n");    printf("  where if space = 3, VME Address Space = A32\n");  }  }/*------------------------------------------------------------------------------ * vmemap1  * *------------------------------------------------------------------------mjw-*/void vmemap1(char *b,int l){  int num;  long temp,count,space,size,type;  char vmespc = 0;  num = sscanf(b,"%lx %lx %lx %lx %lx",&temp,&count,&space,&size,&type);  if (num != 5) {    printf("Usage: map address count space size type\n");    printf("  where address is VME Address to set Universe image to\n");    printf("    Space = 0 CR/CSR    Space = 1 A16\n");    printf("    Space = 2 A24       Space = 3 A32\n\n");    printf("    Size  = 1 8 bit     Size  = 2 16 bit\n");    printf("    Size  = 3 32 bit    Size  = 4 64 bit\n\n");    printf("    Type  = 0 USR/DATA  Type  = 1 USR/PRG\n");    printf("    Type  = 2 SUP/DATA  Type  = 3 SUP/PRG\n");  } else {    if (!quiet)      printf("Setting PCI Slave Image to address %08lX\n",temp);    // VME Size    if (size == 1) {      vmespc = VME_SIZE_8;             } else if (size == 2) {      vmespc = VME_SIZE_16;            } else if (size == 3) {      vmespc = VME_SIZE_32;            } else if (size == 4) {      vmespc = VME_SIZE_64;            } else      printf(" Bad Size\n");    FixedAdder = temp;                               vmespc |= space;    switch (type) {    case 0:      vmespc &= ~VME_SUP_USR;      vmespc &= ~VME_PRG_DATA;      break;    case 1:      vmespc &= ~VME_SUP_USR;      vmespc |= VME_PRG_DATA;      break;    case 2:      vmespc |= VME_SUP_USR;      vmespc &= ~VME_PRG_DATA;      break;    case 3:      vmespc |= VME_SUP_USR;      vmespc |= VME_PRG_DATA;      break;    }    VME_Valid_Base = temp;    VME_Valid_Cnt  = count;    vmemap(temp,count,vmespc);  }}/*------------------------------------------------------------------------------ * quit  * *------------------------------------------------------------------------mjw-*/void quit(char *b,int l){  shutdown_vmelib();  if (!quiet)    printf("Exiting\n\n");  exit(0);}/*------------------------------------------------------------------------------ * help * *------------------------------------------------------------------------mjw-*/void help(char *b,int l){  int x = 0;  int done = 0;  printf("Commands:\n");   while (!done) {    printf("%10s ",cmdTable[x].command);    if ((x+1) % 6 == 0)      printf("\n");    if (cmdTable[x++].CmdType == CMDT_NULL)      done = 1;  } // While}/*------------------------------------------------------------------------------ * status  * *------------------------------------------------------------------------mjw-*/void status(char *b,int l){  printf("Program Status:\n");  printf("  Fixed Adder: %08lX\n",FixedAdder);}/*----------------------------------------------------------------------------- *  ProcessCommand * *------------------------------------------------------------------------mjw-*/void ProcessCommand(char *buffer,int len){  int done = 0;  int cmdi = 0;  COMMAND *cpnt;  char *cmd;  char *params = 0;  int x,plen = 0;  long temp;  cmd = buffer;  for (x=0;x < len;x++) {    if (buffer[x] == ' ') {      buffer[x] = 0;             // NULL Term the string      params = &buffer[x+ 1];      plen = len - x;      break;    }  }   while (!done) {    if (!strcmp(cmd,cmdTable[cmdi].command)) {      done = 1;      cpnt = &cmdTable[cmdi];      switch (cpnt->CmdType) {      case CMDT_NULL:        break;      case CMDT_FUNC:        func(cpnt->pointer)(params,plen);        break;      case CMDT_MODC:        sscanf(params,"%li",&temp);        *(char*)(cpnt->pointer) = temp;        break;        case CMDT_MODI:        sscanf(params,"%li",&temp);        *(int*)(cpnt->pointer) = temp;        break;        case CMDT_MODL:        sscanf(params,"%lx",&temp);        *(long*)(cpnt->pointer) = temp;        break;        case CMDT_MODB:        if (!strcmp(params,"ON")) {          *(int*)(cpnt->pointer) = 1;        } else if (!strcmp(params,"TRUE")) {          *(int*)(cpnt->pointer) = 1;        } else if (!strcmp(params,"OFF")) {          *(int*)(cpnt->pointer) = 0;        } else if (!strcmp(params,"FALSE")) {          *(int*)(cpnt->pointer) = 0;        } else {          sscanf(params,"%li",&temp);          *(int*)(cpnt->pointer) = temp;        }          break;        } // switch    }    if (cmdTable[cmdi++].CmdType == CMDT_NULL) {      done = 1;      printf("Unknown Command\n");    }  } // While}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -