Commit bba7f5d8 authored by John Robert Gill's avatar John Robert Gill

merge of v0.5 branch into master_ioupdate

parents 8d7dbe0c efefdba4
......@@ -14,13 +14,13 @@ all: libwr2rf.a wr2rf spi_echo
%.o: %.c
$(CC) $(CFLAGS) -MMD -c $< -o $@
libwr2rf.a: $(OBJS_LIB)
$(AR) rcv $@ $(OBJS_LIB)
libwr2rf.a: $(OBJS_LIB) $(OBJS_HOST)
$(AR) rcv $@ $^
spi_echo: $(OBJS_HOST) spi_echo.o libwr2rf.a
spi_echo: spi_echo.o libwr2rf.a
$(CC) -o $@ $^ $(LDFLAGS)
wr2rf: wr2rf.o libwr2rf.a $(OBJS_HOST)
wr2rf: wr2rf.o libwr2rf.a
$(CC) -o $@ $^ $(LDFLAGS)
clean:
......
......@@ -34,7 +34,8 @@ static struct ad9910_config_reg ad9910_default_config[] = {
#define AD9910_REG_CFR2 1
#define AD9910_DEFAULT_CFR2 0x400820
static void ad9910_probe(struct libwr2rf_dev *dev)
static int
ad9910_probe(struct libwr2rf_dev *dev)
{
libwr2rf_dds_write(dev, 0, 0x0, 32); // unidir mode for SDIO
libwr2rf_dds_write(dev, 0, 0x02000002, 32); // unidir mode for SDIO
......@@ -47,9 +48,10 @@ static void ad9910_probe(struct libwr2rf_dev *dev)
printf("AD9910: 0x%x (expected 0x%x)\n", id, AD9910_DEFAULT_CFR2);
if (id != AD9910_DEFAULT_CFR2) {
printf ("DDS not found\n");
exit(1);
printf ("AD9910: Error: DDS not found\n");
return -1;
}
return 0;
}
static uint64_t ad9910_frequency_to_ftw(uint64_t freq_hz )
......@@ -105,11 +107,12 @@ void libwr2rf_dds_configure_sync(struct libwr2rf_dev *dev, int sync_receiver_ena
libwr2rf_dds_ioupdate(dev);
}
void
int
libwr2rf_dds_init(struct libwr2rf_dev *dev, unsigned io_update)
{
/* Probe. */
ad9910_probe(dev);
if (ad9910_probe(dev) != 0)
return -1;
/* Configure sync. */
/* TODO. */
......@@ -119,6 +122,7 @@ libwr2rf_dds_init(struct libwr2rf_dev *dev, unsigned io_update)
uint64_t ftw = ad9910_frequency_to_ftw(223500000ULL);
ad9910_program(dev, ftw, 0, 0x0, io_update);
return 0;
}
void
......
......@@ -567,9 +567,9 @@ int libwr2rf_vtu_output_enable(struct libwr2rf_dev *dev, unsigned id,
v = libwr2rf_read16(dev, csr_addr);
if (en)
v |= WR2RF_INIT_RF_CH_REGS_CH_CSR_DELAY_OEN;
else
v &= ~WR2RF_INIT_RF_CH_REGS_CH_CSR_DELAY_OEN;
else
v |= WR2RF_INIT_RF_CH_REGS_CH_CSR_DELAY_OEN;
libwr2rf_write16(dev, csr_addr, v);
return 0;
......@@ -888,7 +888,7 @@ libwr2rf_configure_tmgclk(struct libwr2rf_dev *dev, unsigned lemo, unsigned oe,
return 0;
}
int
int
libwr2rf_configure_lemo_debug(struct libwr2rf_dev *dev, unsigned lemo, unsigned dbg)
{
unsigned baddr = WR2RF_VME_REGS_INIT;
......
......@@ -2,6 +2,7 @@
#include <stdio.h>
#include <unistd.h>
#include "libwr2rf/board.h"
#include "libwr2rf/api.h"
#include "wr2rf_rfnco_regs.h"
#include "regs.h"
......@@ -163,16 +164,18 @@ libwr2rf_nco_wrcfg (struct libwr2rf_dev *dev, unsigned ch)
return 0;
}
static void
static int
libwr2rf_rf_init_dds (struct libwr2rf_dev *dev)
{
/* 3. DDS (ad9910). */
//libwr2rf_dds_spi_init(dev);
libwr2rf_dds_reset_pulse(dev);
libwr2rf_dds_init(dev, 1);
if (libwr2rf_dds_init(dev, 1) != 0)
return -1;
usleep(1000);
libwr2rf_dds_sync_calibrate(dev, 0);
return 0;
}
static void
......@@ -206,12 +209,56 @@ libwr2rf_rf_init_rfnco (struct libwr2rf_dev *dev)
libwr2rf_nco_wrcfg (dev, 2);
}
void
int
libwr2rf_rf_init (struct libwr2rf_dev *dev)
{
libwr2rf_rf_init_dds (dev);
if (libwr2rf_rf_init_dds (dev) != 0)
return -1;
libwr2rf_rf_init_dac (dev);
libwr2rf_rf_init_rfnco (dev);
return 0;
}
int
libwr2rf_api_init (struct libwr2rf_dev *dev)
{
/* Command iodelay-init */
libwr2rf_iodelay_init(dev);
/* Command dac-iqsetpoint */
libwr2rf_dac_iqsetpoint(dev, 1, 0x4000, 0);
libwr2rf_dac_iqsetpoint(dev, 2, 0x4000, 0);
/* Commands:
dds-init (TODO: io_update)
dds-sync-cal
dac-init
dac-timing
dac-iqctrl
nco-source
nco-wrcfg
*/
if (libwr2rf_rf_init(dev) != 0)
return -1;
/* Configure RF outputs.
Command set-rfout
*/
libwr2rf_set_rf_out(dev, 1, LIBWR2RF_RF_OUT_MIXER);
libwr2rf_set_rf_out(dev, 2, LIBWR2RF_RF_OUT_MIXER);
/* Command wrs-fixedlat */
libwr2rf_set_wrs_fixed_latency (dev, 1000);
/* Command wrs-tolat */
libwr2rf_set_wrs_timeout_latency (dev, 2000);
/* Command nco-reset-delay */
libwr2rf_vtu_nco_reset_delay(dev, 1, 75, 9);
libwr2rf_vtu_nco_reset_delay(dev, 2, 75, 0);
return 0;
}
void
......
......@@ -66,7 +66,10 @@ int libwr2rf_nco_reset(struct libwr2rf_dev *dev, unsigned ch, unsigned en);
int libwr2rf_set_rf_out(struct libwr2rf_dev *dev, unsigned ch, unsigned cfg);
/* Initialize RF (DDS and DAC). */
void libwr2rf_rf_init (struct libwr2rf_dev *dev);
int libwr2rf_rf_init (struct libwr2rf_dev *dev);
/* Post WR full initialization. */
int libwr2rf_api_init (struct libwr2rf_dev *dev);
/* tmg-io connector. */
//#define LIBWR2RF_TMGIO_OUT_RFSYNC 0 /* For channels 1 & 2 */
......
......@@ -10,7 +10,7 @@ void libwr2rf_pll_write(struct libwr2rf_dev *dev, unsigned reg, uint8_t value);
/* For the dds (ad9910). */
void libwr2rf_dds_spi_init(struct libwr2rf_dev *dev); /* Note: common to dds and dac. */
void libwr2rf_dds_init(struct libwr2rf_dev *dev, unsigned io_update); /* In ad9910_init.c */
int libwr2rf_dds_init(struct libwr2rf_dev *dev, unsigned io_update); /* In ad9910_init.c */
void libwr2rf_dds_reset(struct libwr2rf_dev *dev, unsigned reset);
void libwr2rf_dds_reset_pulse(struct libwr2rf_dev *dev);
void libwr2rf_dds_configure_sync(struct libwr2rf_dev *dev, int sync_receiver_enable,
......
......@@ -3039,39 +3039,8 @@ api_init (struct libwr2rf_dev *dev, int argc, char **argv)
sleep(1);
}
/* Command iodelay-init */
libwr2rf_iodelay_init(dev);
/* Command dac-iqsetpoint */
libwr2rf_dac_iqsetpoint(dev, 1, 0x4000, 0);
libwr2rf_dac_iqsetpoint(dev, 2, 0x4000, 0);
/* Commands:
dds-init (TODO: io_update)
dds-sync-cal
dac-init
dac-timing
dac-iqctrl
nco-source
nco-wrcfg
*/
libwr2rf_rf_init(dev);
/* Configure RF outputs.
Command set-rfout
*/
libwr2rf_set_rf_out(dev, 1, LIBWR2RF_RF_OUT_MIXER);
libwr2rf_set_rf_out(dev, 2, LIBWR2RF_RF_OUT_MIXER);
/* Command wrs-fixedlat */
libwr2rf_set_wrs_fixed_latency (dev, 1000);
/* Command wrs-tolat */
libwr2rf_set_wrs_timeout_latency (dev, 2000);
/* Command nco-reset-delay */
libwr2rf_vtu_nco_reset_delay(dev, 1, 75, 9);
libwr2rf_vtu_nco_reset_delay(dev, 2, 75, 0);
if (libwr2rf_api_init (dev) != 0)
printf ("ERROR\n");
}
static void
......
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