commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r6687 - in gnuradio/branches/features/inband-usb/usrp/


From: gnychis
Subject: [Commit-gnuradio] r6687 - in gnuradio/branches/features/inband-usb/usrp/host: apps-inband lib/inband
Date: Wed, 24 Oct 2007 13:26:32 -0600 (MDT)

Author: gnychis
Date: 2007-10-24 13:26:31 -0600 (Wed, 24 Oct 2007)
New Revision: 6687

Removed:
   
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_cs.cc
   
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/test_usrp_inband.cc
Modified:
   gnuradio/branches/features/inband-usb/usrp/host/apps-inband/Makefile.am
   
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_overrun.cc
   
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_registers.cc
   
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_rx.cc
   
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_timestamps.cc
   
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_tx.cc
   
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_underrun.cc
   gnuradio/branches/features/inband-usb/usrp/host/lib/inband/Makefile.am
   
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_inband_usb_packet.cc
   
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_inband_usb_packet.h
   gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_server.cc
   gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_server.h
   
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_usb_interface.cc
   
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_usb_interface.h
Log:
Merging from -r6658:6686 developers/gnychis/inband


Modified: 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/Makefile.am
===================================================================
--- gnuradio/branches/features/inband-usb/usrp/host/apps-inband/Makefile.am     
2007-10-24 19:24:59 UTC (rev 6686)
+++ gnuradio/branches/features/inband-usb/usrp/host/apps-inband/Makefile.am     
2007-10-24 19:26:31 UTC (rev 6687)
@@ -29,7 +29,6 @@
 bin_PROGRAMS =                         
 
 noinst_PROGRAMS =                      \
-       test_usrp_inband_cs             \
        test_usrp_inband_ping           \
        test_usrp_inband_registers      \
        test_usrp_inband_rx             \
@@ -60,9 +59,6 @@
        $(COMPILE_MBH) $(srcdir)/gmac.mbh gmac_mbh.cc
 
 
-test_usrp_inband_cs_SOURCES    = test_usrp_inband_cs.cc ui_sincos.c
-test_usrp_inband_cs_LDADD      = $(USRP_LA) $(USRP_INBAND_LA)
-
 test_usrp_inband_ping_SOURCES  = test_usrp_inband_ping.cc 
 test_usrp_inband_ping_LDADD    = $(USRP_LA) $(USRP_INBAND_LA)
 

Deleted: 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_cs.cc

Modified: 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_overrun.cc
===================================================================
--- 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_overrun.cc
     2007-10-24 19:24:59 UTC (rev 6686)
+++ 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_overrun.cc
     2007-10-24 19:26:31 UTC (rev 6687)
@@ -104,7 +104,7 @@
   // Specify the RBF to use
   pmt_dict_set(usrp_dict,
                pmt_intern("rbf"),
-               pmt_intern("nanocell9.rbf"));
+               pmt_intern("std_inband.rbf"));
 
   pmt_dict_set(usrp_dict,
                pmt_intern("decim-rx"),

Modified: 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_registers.cc
===================================================================
--- 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_registers.cc
   2007-10-24 19:24:59 UTC (rev 6686)
+++ 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_registers.cc
   2007-10-24 19:26:31 UTC (rev 6687)
@@ -119,7 +119,7 @@
   // Specify the RBF to use
   pmt_dict_set(usrp_dict,
                pmt_intern("rbf"),
-               pmt_intern("boe2.rbf"));
+               pmt_intern("std_inband.rbf"));
 
   // Set TX and RX interpolations
   pmt_dict_set(usrp_dict,

Modified: 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_rx.cc
===================================================================
--- 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_rx.cc
  2007-10-24 19:24:59 UTC (rev 6686)
+++ 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_rx.cc
  2007-10-24 19:26:31 UTC (rev 6687)
@@ -108,7 +108,7 @@
   // Specify the RBF to use
   pmt_dict_set(usrp_dict,
                pmt_intern("rbf"),
-               pmt_intern("usrp_inband_profiling.rbf"));
+               pmt_intern("std_inband.rbf"));
 
   pmt_dict_set(usrp_dict,
                pmt_intern("decim-rx"),

Modified: 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_timestamps.cc
===================================================================
--- 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_timestamps.cc
  2007-10-24 19:24:59 UTC (rev 6686)
+++ 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_timestamps.cc
  2007-10-24 19:26:31 UTC (rev 6687)
@@ -149,7 +149,7 @@
   // Specify the RBF to use
   pmt_dict_set(usrp_dict,
                pmt_intern("rbf"),
-               pmt_intern("tmac5.rbf"));
+               pmt_intern("std_inband.rbf"));
 
   define_component("server", "usrp_server", usrp_dict);
 

Modified: 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_tx.cc
===================================================================
--- 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_tx.cc
  2007-10-24 19:24:59 UTC (rev 6686)
+++ 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_tx.cc
  2007-10-24 19:26:31 UTC (rev 6687)
@@ -119,7 +119,7 @@
   // Specify the RBF to use
   pmt_dict_set(usrp_dict,
                pmt_intern("rbf"),
-               pmt_intern("usrp_inband_profiling.rbf"));
+               pmt_intern("std_inband.rbf"));
 
   // Set TX and RX interpolations
   pmt_dict_set(usrp_dict,

Modified: 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_underrun.cc
===================================================================
--- 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_underrun.cc
    2007-10-24 19:24:59 UTC (rev 6686)
+++ 
gnuradio/branches/features/inband-usb/usrp/host/apps-inband/test_usrp_inband_underrun.cc
    2007-10-24 19:26:31 UTC (rev 6687)
@@ -145,7 +145,7 @@
   // Specify the RBF to use
   pmt_dict_set(usrp_dict,
                pmt_intern("rbf"),
-               pmt_intern("usrp_inband_profiling.rbf"));
+               pmt_intern("std_inband.rbf"));
 
   // Set TX and RX interpolations
   pmt_dict_set(usrp_dict,

Modified: gnuradio/branches/features/inband-usb/usrp/host/lib/inband/Makefile.am
===================================================================
--- gnuradio/branches/features/inband-usb/usrp/host/lib/inband/Makefile.am      
2007-10-24 19:24:59 UTC (rev 6686)
+++ gnuradio/branches/features/inband-usb/usrp/host/lib/inband/Makefile.am      
2007-10-24 19:26:31 UTC (rev 6687)
@@ -111,15 +111,10 @@
 # ------------------------------------------------------------------------
 
 noinst_PROGRAMS =                      \
-       test_inband                     \
-       test_usrp_inband
+       test_inband
 
 test_inband_SOURCES = test_inband.cc
 test_inband_LDADD   = libusrp_inband-qa.la
 
-test_usrp_inband_SOURCES = test_usrp_inband.cc
-test_usrp_inband_LDADD = libusrp_inband-qa.la
-
-
 MOSTLYCLEANFILES = \
        $(BUILT_SOURCES) *~ *.pyc

Deleted: 
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/test_usrp_inband.cc

Modified: 
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_inband_usb_packet.cc
===================================================================
--- 
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_inband_usb_packet.cc
        2007-10-24 19:24:59 UTC (rev 6686)
+++ 
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_inband_usb_packet.cc
        2007-10-24 19:26:31 UTC (rev 6687)
@@ -77,13 +77,8 @@
   *payload = host_to_usrp_u32(ping);
 
   // Update payload length
-  int h_flags = flags();
-  int h_chan = chan();
-  int h_tag = tag();
-  int h_payload_len = payload_len() + CS_FIXED_LEN + CS_PING_LEN;
+  incr_header_len(CS_FIXED_LEN + CS_PING_LEN);
 
-  set_header(h_flags, h_chan, h_tag, h_payload_len);
-
   return true;
 }
 
@@ -110,13 +105,8 @@
   *payload = host_to_usrp_u32(ping);
 
   // Update payload length
-  int h_flags = flags();
-  int h_chan = chan();
-  int h_tag = tag();
-  int h_payload_len = payload_len() + CS_FIXED_LEN + CS_PING_LEN;
+  incr_header_len(CS_FIXED_LEN + CS_PING_LEN);
 
-  set_header(h_flags, h_chan, h_tag, h_payload_len);
-
   return true;
 }
 
@@ -148,13 +138,8 @@
   *payload = host_to_usrp_u32((uint32_t) val);
   
   // Rebuild the header to update the payload length
-  int h_flags = flags();
-  int h_chan = chan();
-  int h_tag = tag();
-  int h_payload_len = payload_len() + CS_FIXED_LEN + CS_WRITEREG_LEN;
+  incr_header_len(CS_FIXED_LEN + CS_WRITEREG_LEN);
 
-  set_header(h_flags, h_chan, h_tag, h_payload_len);
-
   return true;
 }
 
@@ -189,13 +174,8 @@
   *payload = host_to_usrp_u32((uint32_t) mask);
   
   // Rebuild the header to update the payload length
-  int h_flags = flags();
-  int h_chan = chan();
-  int h_tag = tag();
-  int h_payload_len = payload_len() + CS_FIXED_LEN + CS_WRITEREGMASKED_LEN;
+  incr_header_len(CS_FIXED_LEN + CS_WRITEREGMASKED_LEN);
 
-  set_header(h_flags, h_chan, h_tag, h_payload_len);
-
   return true;
 }
 
@@ -221,13 +201,8 @@
   *payload = host_to_usrp_u32(read_reg);
 
   // Update payload length
-  int h_flags = flags();
-  int h_chan = chan();
-  int h_tag = tag();
-  int h_payload_len = payload_len() + CS_FIXED_LEN + CS_READREG_LEN;
+  incr_header_len(CS_FIXED_LEN + CS_READREG_LEN);
 
-  set_header(h_flags, h_chan, h_tag, h_payload_len);
-
   return true;
 }
 
@@ -257,13 +232,8 @@
   *payload = host_to_usrp_u32((uint32_t) reg_val); 
 
   // Update payload length
-  int h_flags = flags();
-  int h_chan = chan();
-  int h_tag = tag();
-  int h_payload_len = payload_len() + CS_FIXED_LEN + CS_READREGREPLY_LEN;
+  incr_header_len(CS_FIXED_LEN + CS_READREGREPLY_LEN);
 
-  set_header(h_flags, h_chan, h_tag, h_payload_len);
-
   return true;
 }
 
@@ -288,13 +258,8 @@
   *payload = host_to_usrp_u32(delay);
 
   // Update payload length
-  int h_flags = flags();
-  int h_chan = chan();
-  int h_tag = tag();
-  int h_payload_len = payload_len() + CS_FIXED_LEN + CS_DELAY_LEN;
+  incr_header_len(CS_FIXED_LEN + CS_DELAY_LEN);
 
-  set_header(h_flags, h_chan, h_tag, h_payload_len);
-
   return true;
 }
 
@@ -327,13 +292,8 @@
    memcpy(payload, i2c_data, data_len);
 
   // Update payload length
-  int h_flags = flags();
-  int h_chan = chan();
-  int h_tag = tag();
-  int h_payload_len = payload_len() + CS_FIXED_LEN + i2c_len;
+  incr_header_len(CS_FIXED_LEN + i2c_len);
 
-  set_header(h_flags, h_chan, h_tag, h_payload_len);
-
   return true;
 }
 
@@ -366,13 +326,8 @@
   *payload = host_to_usrp_u32(word1);
 
   // Update payload length
-  int h_flags = flags();
-  int h_chan = chan();
-  int h_tag = tag();
-  int h_payload_len = payload_len() + CS_FIXED_LEN + CS_I2CREAD_LEN;
+  incr_header_len(CS_FIXED_LEN + CS_I2CREAD_LEN);
 
-  set_header(h_flags, h_chan, h_tag, h_payload_len);
-
   return true;
 }
 
@@ -405,13 +360,8 @@
   memcpy(payload, i2c_data, i2c_data_len);
 
   // Update payload length
-  int h_flags = flags();
-  int h_chan = chan();
-  int h_tag = tag();
-  int h_payload_len = payload_len() + CS_FIXED_LEN + i2c_len;
+  incr_header_len(CS_FIXED_LEN + i2c_len);
 
-  set_header(h_flags, h_chan, h_tag, h_payload_len);
-
   return true;
 }
 
@@ -453,13 +403,8 @@
   memcpy(payload, spi_data, spi_data_len);
 
   // Update payload length
-  int h_flags = flags();
-  int h_chan = chan();
-  int h_tag = tag();
-  int h_payload_len = payload_len() + CS_FIXED_LEN + spi_len;
+  incr_header_len(CS_FIXED_LEN + spi_len);
 
-  set_header(h_flags, h_chan, h_tag, h_payload_len);
-
   return true;
 }
 
@@ -507,13 +452,8 @@
   *payload = host_to_usrp_u32(word);
 
   // Update payload length
-  int h_flags = flags();
-  int h_chan = chan();
-  int h_tag = tag();
-  int h_payload_len = payload_len() + CS_FIXED_LEN + CS_SPIREAD_LEN;
+  incr_header_len(CS_FIXED_LEN + CS_SPIREAD_LEN);
 
-  set_header(h_flags, h_chan, h_tag, h_payload_len);
-  
   return true;
 }
 
@@ -545,13 +485,8 @@
   memcpy(payload, spi_data, spi_data_len);
 
   // Update payload length
-  int h_flags = flags();
-  int h_chan = chan();
-  int h_tag = tag();
-  int h_payload_len = payload_len() + CS_FIXED_LEN + spi_len;
+  incr_header_len(CS_FIXED_LEN + spi_len);
 
-  set_header(h_flags, h_chan, h_tag, h_payload_len);
-
   return true;
 }
 

Modified: 
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_inband_usb_packet.h
===================================================================
--- 
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_inband_usb_packet.h
 2007-10-24 19:24:59 UTC (rev 6686)
+++ 
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_inband_usb_packet.h
 2007-10-24 19:26:31 UTC (rev 6687)
@@ -150,6 +150,10 @@
                        | ((payload_len & PAYLOAD_LEN_MASK) << 
PAYLOAD_LEN_SHIFT));
     d_word0 = host_to_usrp_u32(word0);
   }
+
+  void incr_header_len(int val) {
+    set_header(flags(), chan(), tag(), payload_len() + val);
+  }
   
   uint32_t timestamp() const {
     return usrp_to_host_u32(d_timestamp);

Modified: 
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_server.cc
===================================================================
--- gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_server.cc   
2007-10-24 19:24:59 UTC (rev 6686)
+++ gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_server.cc   
2007-10-24 19:26:31 UTC (rev 6687)
@@ -28,6 +28,8 @@
 #include <mb_class_registry.h>
 #include <vector>
 #include <usrp_usb_interface.h>
+#include <fpga_regs_common.h>
+#include <fpga_regs_standard.h>
 
 #include <symbols_usrp_server_cs.h>
 #include <symbols_usrp_channel.h>
@@ -39,7 +41,7 @@
 
 typedef usrp_inband_usb_packet transport_pkt;   // makes conversion to gigabit 
easy
 
-const static bool verbose = false;
+const static bool verbose = true;
 
 static std::string
 str(long x)
@@ -51,14 +53,43 @@
 
 usrp_server::usrp_server(mb_runtime *rt, const std::string &instance_name, 
pmt_t user_arg)
   : mb_mblock(rt, instance_name, user_arg),
+  d_fpga_debug(false),
+  d_interp_tx(128),     // these should match the lower level defaults (rx 
also)
+  d_decim_rx(128),
   d_fake_rx(false)
 {
   if(verbose)
     std::cout << "[USRP_SERVER] Initializing...\n";
 
   // Dictionary for arguments to all of the components
-  pmt_t usrp_dict = user_arg;
+  d_usrp_dict = user_arg;
   
+  if (pmt_is_dict(d_usrp_dict)) {
+
+    if(pmt_t fpga_debug = pmt_dict_ref(d_usrp_dict, 
+                                      pmt_intern("fpga-debug"), 
+                                      PMT_NIL)) {
+      if(pmt_eqv(fpga_debug, PMT_T)) 
+        d_fpga_debug=true;
+    }
+    
+    // Read the TX interpolations
+    if(pmt_t interp_tx = pmt_dict_ref(d_usrp_dict, 
+                                      pmt_intern("interp-tx"), 
+                                      PMT_NIL)) {
+      if(!pmt_eqv(interp_tx, PMT_NIL)) 
+        d_interp_tx = pmt_to_long(interp_tx);
+    }
+    
+    // Read the RX decimation rate
+    if(pmt_t decim_rx = pmt_dict_ref(d_usrp_dict, 
+                                      pmt_intern("decim-rx"), 
+                                      PMT_NIL)) {
+      if(!pmt_eqv(decim_rx, PMT_NIL)) 
+        d_decim_rx = pmt_to_long(decim_rx);
+    }
+  }
+  
   // control & status port
   d_cs = define_port("cs", "usrp-server-cs", true, mb_port::EXTERNAL); 
   d_cs_usrp = define_port("cs_usrp", "usrp-interface-cs", false, 
mb_port::INTERNAL);   
@@ -80,7 +111,7 @@
                                mb_port::EXTERNAL));
   }
 
-  define_component("usrp", "usrp_usb_interface", usrp_dict);
+  define_component("usrp", "usrp_usb_interface", d_usrp_dict);
   connect("self", "cs_usrp", "usrp", "cs");
 
   d_defer=false;
@@ -176,6 +207,8 @@
       pmt_t status = pmt_nth(1, data);
       d_cs->send(s_response_open, pmt_list2(invocation_handle, status));
 
+      initialize_registers();
+
       if(pmt_eqv(status,PMT_T)) {
         d_opened = true;
         d_defer = false;
@@ -1387,4 +1420,205 @@
   return -1;
 }
 
+// Need to initialize several registers according to the specified settings of
+// the user
+//
+// FIXME: I believe this is specific to the basic daughterboards, this would
+// need to change when daughterboard support is added
+void
+usrp_server::initialize_registers()
+{
+  // We use handle_cmd_to_control_channel() to create the register writes using
+  // PMT_NIL as the response port to tell usrp_server not to pass the response
+  // up to any application.
+  if(verbose)
+    std::cout << "[USRP_SERVER] Initializing registers...\n";
+
+  // RX mode to normal (0)
+  set_register(FR_MODE, 0);
+
+  // FPGA debugging?
+  if(d_fpga_debug) {
+    set_register(FR_DEBUG_EN, 1);
+    // FIXME: need to figure out exact register writes to control daughterboard
+    // pins that need to be written to
+  } else {
+    set_register(FR_DEBUG_EN, 0);
+  }
+
+  // Set the transmit sample rate divisor, which is 4-1
+  set_register(FR_TX_SAMPLE_RATE_DIV, 3);
+
+  // Dboard IO buffer and register settings
+  set_register(FR_OE_0, (0xffff << 16) | 0x0000);
+  set_register(FR_IO_0, (0xffff << 16) | 0x0000);
+  set_register(FR_OE_1, (0xffff << 16) | 0x0000);
+  set_register(FR_IO_1, (0xffff << 16) | 0x0000);
+  set_register(FR_OE_2, (0xffff << 16) | 0x0000);
+  set_register(FR_IO_2, (0xffff << 16) | 0x0000);
+  set_register(FR_OE_3, (0xffff << 16) | 0x0000);
+  set_register(FR_IO_3, (0xffff << 16) | 0x0000);
+
+  // zero Tx side Auto Transmit/Receive regs
+  set_register(FR_ATR_MASK_0, 0); 
+  set_register(FR_ATR_TXVAL_0, 0);
+  set_register(FR_ATR_RXVAL_0, 0);
+  set_register(FR_ATR_MASK_1, 0); 
+  set_register(FR_ATR_TXVAL_1, 0);
+  set_register(FR_ATR_RXVAL_1, 0);
+  set_register(FR_ATR_MASK_2, 0);
+  set_register(FR_ATR_TXVAL_2, 0);
+  set_register(FR_ATR_RXVAL_2, 0);
+  set_register(FR_ATR_MASK_3, 0);
+  set_register(FR_ATR_TXVAL_3, 0);
+  set_register(FR_ATR_RXVAL_3, 0);
+
+  // Configure TX mux, this is a hacked value
+  set_register(FR_TX_MUX, 0x00000081);
+
+  // Set the interpolation rate, which is the rate divided by 4, minus 1
+  set_register(FR_INTERP_RATE, (d_interp_tx/4)-1);
+
+  // Apparently this register changes again
+  set_register(FR_TX_MUX, 0x00000981);
+
+  // Set the receive sample rate divisor, which is 2-1
+  set_register(FR_RX_SAMPLE_RATE_DIV, 1);
+
+  // DC offset
+  set_register(FR_DC_OFFSET_CL_EN, 0x0000000f);
+
+  // Reset the DC correction offsets
+  set_register(FR_ADC_OFFSET_0, 0);
+  set_register(FR_ADC_OFFSET_1, 0);
+
+  // Some hard-coded RX configuration
+  set_register(FR_RX_FORMAT, 0x00000300);
+  set_register(FR_RX_MUX, 1);
+
+  // RX decimation rate is divided by two, then subtract 1
+  set_register(FR_DECIM_RATE, (d_decim_rx/2)-1);
+
+  // More hard coding
+  set_register(FR_RX_MUX, 0x000e4e41);
+
+  // Resetting RX registers
+  set_register(FR_RX_PHASE_0, 0);
+  set_register(FR_RX_PHASE_1, 0);
+  set_register(FR_RX_PHASE_2, 0);
+  set_register(FR_RX_PHASE_3, 0);
+  set_register(FR_RX_FREQ_0, 0x28000000);
+  set_register(FR_RX_FREQ_1, 0);
+  set_register(FR_RX_FREQ_2, 0);
+  set_register(FR_RX_FREQ_3, 0);
+
+  // DEBUGGING
+  check_register_initialization();
+}
+
+// FIXME: used for debugging to determine if all the registers are actually
+// being set correctly
+void
+usrp_server::check_register_initialization()
+{
+  // RX mode to normal (0)
+  read_register(FR_MODE);
+
+  // FPGA debugging?
+  if(d_fpga_debug) {
+    read_register(FR_DEBUG_EN);
+    // FIXME: need to figure out exact register writes to control daughterboard
+    // pins that need to be written to
+  } else {
+    read_register(FR_DEBUG_EN);
+  }
+
+  // Set the transmit sample rate divisor, which is 4-1
+  read_register(FR_TX_SAMPLE_RATE_DIV);
+
+  // Dboard IO buffer and register settings
+  read_register(FR_OE_0);
+  read_register(FR_IO_0);
+  read_register(FR_OE_1);
+  read_register(FR_IO_1);
+  read_register(FR_OE_2);
+  read_register(FR_IO_2);
+  read_register(FR_OE_3);
+  read_register(FR_IO_3);
+
+  // zero Tx side Auto Transmit/Receive regs
+  read_register(FR_ATR_MASK_0); 
+  read_register(FR_ATR_TXVAL_0);
+  read_register(FR_ATR_RXVAL_0);
+  read_register(FR_ATR_MASK_1); 
+  read_register(FR_ATR_TXVAL_1);
+  read_register(FR_ATR_RXVAL_1);
+  read_register(FR_ATR_MASK_2);
+  read_register(FR_ATR_TXVAL_2);
+  read_register(FR_ATR_RXVAL_2);
+  read_register(FR_ATR_MASK_3);
+  read_register(FR_ATR_TXVAL_3);
+  read_register(FR_ATR_RXVAL_3);
+
+  // Configure TX mux, this is a hacked value
+  read_register(FR_TX_MUX);
+
+  // Set the interpolation rate, which is the rate divided by 4, minus 1
+  read_register(FR_INTERP_RATE);
+
+  // Apparently this register changes again
+  read_register(FR_TX_MUX);
+
+  // Set the receive sample rate divisor, which is 2-1
+  read_register(FR_RX_SAMPLE_RATE_DIV);
+
+  // DC offset
+  read_register(FR_DC_OFFSET_CL_EN);
+
+  // Reset the DC correction offsets
+  read_register(FR_ADC_OFFSET_0);
+  read_register(FR_ADC_OFFSET_1);
+
+  // Some hard-coded RX configuration
+  read_register(FR_RX_FORMAT);
+  read_register(FR_RX_MUX);
+
+  // RX decimation rate is divided by two, then subtract 1
+  read_register(FR_DECIM_RATE);
+
+  // More hard coding
+  read_register(FR_RX_MUX);
+
+  // Resetting RX registers
+  read_register(FR_RX_PHASE_0);
+  read_register(FR_RX_PHASE_1);
+  read_register(FR_RX_PHASE_2);
+  read_register(FR_RX_PHASE_3);
+  read_register(FR_RX_FREQ_0);
+  read_register(FR_RX_FREQ_1);
+  read_register(FR_RX_FREQ_2);
+  read_register(FR_RX_FREQ_3);
+}
+
+// THIS IS ONLY FOR INTERNAL USRP_SERVER USAGE
+void
+usrp_server::set_register(long reg, long val)
+{
+  handle_cmd_to_control_channel(d_tx[0], d_chaninfo_tx,
+    pmt_list2(PMT_NIL,  // empty invoc handle
+              pmt_list1(pmt_list2(s_op_write_reg,
+                        pmt_list2(pmt_from_long(reg),
+                                  pmt_from_long(val))))));
+}
+
+void
+usrp_server::read_register(long reg)
+{
+  handle_cmd_to_control_channel(d_tx[0], d_chaninfo_tx,
+    pmt_list2(PMT_NIL,  // empty invoc handle
+              pmt_list1(pmt_list2(s_op_read_reg,
+                        pmt_list2(pmt_from_long(0),
+                                  pmt_from_long(reg))))));
+}
+
 REGISTER_MBLOCK_CLASS(usrp_server);

Modified: 
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_server.h
===================================================================
--- gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_server.h    
2007-10-24 19:24:59 UTC (rev 6686)
+++ gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_server.h    
2007-10-24 19:26:31 UTC (rev 6687)
@@ -51,6 +51,13 @@
   long d_ntx_chan;
   long d_nrx_chan;
 
+  pmt_t d_usrp_dict;
+
+  bool d_fpga_debug;
+  
+  long d_interp_tx;
+  long d_decim_rx;
+
   // Keep track of the request IDs
   struct rid_info {
     pmt_t owner;
@@ -114,6 +121,10 @@
   bool check_valid(mb_port_sptr port, long channel, std::vector<struct 
channel_info> &chan_info, pmt_t signal_info);
   void parse_control_pkt(pmt_t invocation_handle, transport_pkt *pkt);
   long next_rid();
+  void initialize_registers();
+  void set_register(long reg, long val);
+  void read_register(long reg);
+  void check_register_initialization();
 };
 
 #endif /* INCLUDED_USRP_SERVER_H */

Modified: 
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_usb_interface.cc
===================================================================
--- 
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_usb_interface.cc
    2007-10-24 19:24:59 UTC (rev 6686)
+++ 
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_usb_interface.cc
    2007-10-24 19:26:31 UTC (rev 6687)
@@ -51,7 +51,6 @@
 // need to take number of TX and RX channels as parameter
 usrp_usb_interface::usrp_usb_interface(mb_runtime *rt, const std::string 
&instance_name, pmt_t user_arg)
   : mb_mblock(rt, instance_name, user_arg),
-  d_fpga_debug(false),
   d_fake_usrp(false),
   d_rx_reading(false),
   d_interp_tx(128),
@@ -147,8 +146,6 @@
   d_utx = NULL;
   d_urx = NULL;
   
-  d_fpga_debug=true;   // WARNING: DO NOT ENABLE WITH D'BOARDS OTHER THAN 
BASIC TX/RX
-
 }
 
 usrp_usb_interface::~usrp_usb_interface() 
@@ -330,19 +327,6 @@
     return;
   }
 
-  if(d_fpga_debug) {
-    d_utx->_write_fpga_reg(FR_DEBUG_EN,0xf);
-    d_utx->_write_oe(0, 0xffff, 0xffff);
-    d_urx->_write_oe(0, 0xffff, 0xffff);
-    d_utx->_write_oe(1, 0xffff, 0xffff);
-    d_urx->_write_oe(1, 0xffff, 0xffff);
-
-//    while(1){
-//      for(int i=0; i<0xffff; i++) 
-//        d_urx->write_io(0, i, 0xffff);
-//    }
-  }
-  
   if (verbose)
     std::cout << "[USRP_USB_INTERFACE] Setup RX channel\n";
 

Modified: 
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_usb_interface.h
===================================================================
--- 
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_usb_interface.h 
    2007-10-24 19:24:59 UTC (rev 6686)
+++ 
gnuradio/branches/features/inband-usb/usrp/host/lib/inband/usrp_usb_interface.h 
    2007-10-24 19:26:31 UTC (rev 6687)
@@ -42,8 +42,6 @@
   long d_ntx_chan;
   long d_nrx_chan;
 
-  long d_fpga_debug;
-
   bool d_fake_usrp;
 
   bool d_rx_reading;





reply via email to

[Prev in Thread] Current Thread [Next in Thread]