/************************************************* * sfi.c Y.Sugaya 98/9/27 * perfome one read and write action from Force7V to SFI * sfi [1] [2] [3] * [1] data to be write * [2] address for command, see SFI manual p13 * [3] VME base address for SFI * * with no arguments, this program sets all LED of SFI FP on. *************************************************/ #include #include #include #include #include #include /*#include */ #include #include #define SFI_SIZE 0x00030000 #define SFI_MODE "A24" main(argc,argv) int argc; char **argv; { unsigned long base_addr; unsigned long com_addr; unsigned long data; unsigned long *l_reg; long vme_map(); if (argc>1) sscanf(argv[1],"%X",&data); else data = 15; if (argc>2) sscanf(argv[2],"%X",&com_addr); else com_addr = 0x1000; com_addr = com_addr/4; if (argc>3) sscanf(argv[3],"%X",&base_addr); else base_addr = 0xE00000; printf("BASE address = %X ",base_addr); printf("COMM address = %X ",com_addr); printf("data = %X\n",data); l_reg = (unsigned long *)(vme_map(SFI_MODE,base_addr,SFI_SIZE)); printf("mapped\n"); data = *(l_reg+com_addr); printf("data = %d %x \n", data, data); *(l_reg+com_addr) = data; printf("sended\n"); munmap((caddr_t)l_reg,SFI_SIZE); printf("end\n"); } long vme_map(mode,win_base,win_size) char *mode; long win_base, win_size; { /* struct vme_ioctl vmeioctl;*/ int vme_fd; /* file descriptor for VME device */ caddr_t vme_vaddr; /* virtual address */ int vme_waddr; /* VME base address of window */ vme_waddr = 0; if (strcmp(mode,"A24")==0) vme_fd = open("/dev/vme24d32", O_RDWR); else if (strcmp(mode,"A32")==0) vme_fd = open("/dev/vme32d32", O_RDWR); else { printf("Invalid mode %s\n",mode); return -1; } if (vme_fd == -1) {printf("VME %s open error\n",mode); return -1; } /********************************************************************* * Map a portion of VME memory into the program's address space. * *********************************************************************/ vme_vaddr = mmap((caddr_t)0,win_size, PROT_READ | PROT_WRITE, MAP_SHARED, vme_fd, win_base); if (vme_vaddr == (caddr_t)-1) { perror("Mapping: "); exit(1); } return (long)vme_vaddr; }