Commit a9d3e9cc authored by Tomasz Wlostowski's avatar Tomasz Wlostowski

software/lib: applied Matthieu's patches, fixing operation of multiple cards in the same PC

parent a072a95e
...@@ -5,7 +5,7 @@ CFLAGS = -I../include -g -Imini_bone -Ispll ...@@ -5,7 +5,7 @@ CFLAGS = -I../include -g -Imini_bone -Ispll
OBJS_LIB = fdelay_lib.o fdelay_bus.o rr_io.o i2c_master.o onewire.o mini_bone/minibone_lib.o mini_bone/ptpd_netif.o spec_common.o OBJS_LIB = fdelay_lib.o fdelay_bus.o rr_io.o i2c_master.o onewire.o mini_bone/minibone_lib.o mini_bone/ptpd_netif.o spec_common.o
all: testprog lib testprog2 testprog3 testprog4 all: testprog lib testprog3 testprog4
lib: $(OBJS_LIB) lib: $(OBJS_LIB)
gcc -shared -o libfinedelay.so $(OBJS_LIB) gcc -shared -o libfinedelay.so $(OBJS_LIB)
...@@ -13,8 +13,8 @@ lib: $(OBJS_LIB) ...@@ -13,8 +13,8 @@ lib: $(OBJS_LIB)
testprog: lib fdelay_test.o testprog: lib fdelay_test.o
gcc -o fdelay_test $(OBJS_LIB) fdelay_test.o -lm gcc -o fdelay_test $(OBJS_LIB) fdelay_test.o -lm
testprog2: lib fdelay_cal.o #testprog2: lib fdelay_cal.o
gcc -o fdelay_cal $(OBJS_LIB) fdelay_cal.o -lm # gcc -o fdelay_cal $(OBJS_LIB) fdelay_cal.o -lm
testprog3: lib fdelay_pps_demo.o testprog3: lib fdelay_pps_demo.o
gcc -o fdelay_pps_demo $(OBJS_LIB) fdelay_pps_demo.o -lm gcc -o fdelay_pps_demo $(OBJS_LIB) fdelay_pps_demo.o -lm
......
...@@ -36,10 +36,10 @@ uint32_t d = mbn_readl(priv, addr >> 2); ...@@ -36,10 +36,10 @@ uint32_t d = mbn_readl(priv, addr >> 2);
return d; return d;
} }
fdelay_device_t *fdelay_create_rawrabbit(uint32_t base_addr) fdelay_device_t *fdelay_create_rawrabbit(int fd, uint32_t base_addr)
{ {
fdelay_device_t *dev = malloc(sizeof(fdelay_device_t)); fdelay_device_t *dev = malloc(sizeof(fdelay_device_t));
rr_init(RR_DEVSEL_UNUSED, RR_DEVSEL_UNUSED); rr_bind(fd);
dev->writel = my_rr_writel; dev->writel = my_rr_writel;
dev->readl = my_rr_readl; dev->readl = my_rr_readl;
dev->base_addr = base_addr; dev->base_addr = base_addr;
...@@ -68,3 +68,14 @@ fdelay_device_t *fdelay_create_minibone(char *iface, char *mac_addr, uint32_t ba ...@@ -68,3 +68,14 @@ fdelay_device_t *fdelay_create_minibone(char *iface, char *mac_addr, uint32_t ba
return dev; return dev;
} }
int fdelay_load_firmware(const char *path)
{
fprintf(stderr,"Booting up the FPGA with %s.\n", path);
if(rr_load_bitstream_from_file(path) < 0)
{
fprintf(stderr,"Failed to load FPGA bitstream.\n");
return -1;
}
return 0;
}
\ No newline at end of file
...@@ -71,7 +71,7 @@ main() ...@@ -71,7 +71,7 @@ main()
{ {
fdelay_device_t *dev = malloc(sizeof(fdelay_device_t)); fdelay_device_t *dev = malloc(sizeof(fdelay_device_t));
rr_init(); rr_init(RR_DEVSEL_UNUSED, RR_DEVSEL_UNUSED);
dev->writel = my_writel; dev->writel = my_writel;
dev->readl = my_readl; dev->readl = my_readl;
......
...@@ -1171,7 +1171,8 @@ int fdelay_configure_output(fdelay_device_t *dev, int channel, int enable, int64 ...@@ -1171,7 +1171,8 @@ int fdelay_configure_output(fdelay_device_t *dev, int channel, int enable, int64
delay_ps -= hw->calib.zero_offset[channel-1]; delay_ps -= hw->calib.zero_offset[channel-1];
start = fdelay_from_picos(delay_ps); start = fdelay_from_picos(delay_ps);
end = fdelay_from_picos(delay_ps + width_ps); end = fdelay_from_picos(delay_ps + width_ps);
delta = fdelay_from_picos(delta_ps); delta = fdelay_from_picos(delta_ps);
// printf("Start: %lld: %d:%d\n", start.utc, start.coarse, start.frac); // printf("Start: %lld: %d:%d\n", start.utc, start.coarse, start.frac);
...@@ -1222,11 +1223,17 @@ int fdelay_configure_pulse_gen(fdelay_device_t *dev, int channel, int enable, fd ...@@ -1222,11 +1223,17 @@ int fdelay_configure_pulse_gen(fdelay_device_t *dev, int channel, int enable, fd
if(channel < 1 || channel > 4) if(channel < 1 || channel > 4)
return -1; return -1;
start = t_start; start = t_start;
end = ts_add(start, fdelay_from_picos(width_ps)); end = fdelay_from_picos(fdelay_to_picos(start) + width_ps - 4000);
delta = fdelay_from_picos(delta_ps); delta = fdelay_from_picos(delta_ps);
// printf("Start: %lld: %d:%d\n", start.utc, start.coarse, start.frac); //start = t_start;
//end = ts_add(start, fdelay_from_picos(width_ps));
//delta = fdelay_from_picos(delta_ps);
//printf("Start: %lld: %d:%d\n", start.utc, start.coarse, start.frac);
//printf("width: %lld delta: %lld rep: %d\n", width_ps, delta_ps, rep_count);
chan_writel(hw->frr_cur[channel-1], FD_REG_FRR); chan_writel(hw->frr_cur[channel-1], FD_REG_FRR);
...@@ -1390,4 +1397,4 @@ int fd_update_spll(fdelay_device_t *dev) ...@@ -1390,4 +1397,4 @@ int fd_update_spll(fdelay_device_t *dev)
} }
} }
#endif #endif
\ No newline at end of file
...@@ -18,6 +18,12 @@ ...@@ -18,6 +18,12 @@
static int fd; static int fd;
int rr_bind(int a_fd)
{
fd = a_fd;
return 0;
}
int rr_init(int bus, int devfn) int rr_init(int bus, int devfn)
{ {
struct rr_devsel devsel; struct rr_devsel devsel;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment