#include #include #include #include #include #include #include #include int *pretval; short *pinval; unsigned char *pidx_data; char *base; size_t len = 1<<(10+2); //4K int fd; void *mem; initfpga() { fd = open("/dev/uio0", O_SYNC|O_RDWR); if ( fd < 0 ) { perror("Failed to open /dev/uio0\n" " Does it exists?\n" " Check permissions\n" " Check devicetree\n"); return -1; } mem = mmap(NULL, len , PROT_READ | PROT_WRITE, MAP_SHARED, fd , 0); if (mem == MAP_FAILED) { perror("Can't map memory"); close(fd); return -2; } /* volatile uint32_t * p = (uint32_t*)mem; */ base = (char *) mem; pretval = (int *) (base+0x10); pinval = (short *) (base+0x18); pidx_data = (unsigned char *) (base+0x20); } fpgadoit(int in1, int in2) { unsigned char phi; /* user input */ short mul; /* user input */ int retval = 0; unsigned short inval; unsigned char idx_data; register int i; register char st, st2; mul = (short) in1; phi = (unsigned short) in2; *pinval = mul; *pidx_data = phi; i=10000; *(base + 0) |= 0x01; st2 = *(base+0); while (i>0 && ((st = *(base+0)) & 2) == 0 && (st2 & 2) == 0) { i--; } retval = *pretval; /* printf("Read out: inval=%hd idx_data=%hhd retval=%d\n", *pinval, *pidx_data, retval); */ return retval; } exitfpga() { //cleanup munmap(mem, len); close(fd); return 0; }