commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r7982 - usrp2/trunk/firmware/apps


From: eb
Subject: [Commit-gnuradio] r7982 - usrp2/trunk/firmware/apps
Date: Sun, 9 Mar 2008 01:08:40 -0700 (MST)

Author: eb
Date: 2008-03-09 01:08:39 -0700 (Sun, 09 Mar 2008)
New Revision: 7982

Modified:
   usrp2/trunk/firmware/apps/sd_gentest.c
Log:
working serdes gen and test

Modified: usrp2/trunk/firmware/apps/sd_gentest.c
===================================================================
--- usrp2/trunk/firmware/apps/sd_gentest.c      2008-03-09 07:01:06 UTC (rev 
7981)
+++ usrp2/trunk/firmware/apps/sd_gentest.c      2008-03-09 08:08:39 UTC (rev 
7982)
@@ -60,7 +60,7 @@
 {
   int i = 0;
   for (i = 0; i < BP_NLINES; i++){
-    buf[i] = (i << 16) | i;
+    buf[i] = ((2*i + 0) << 16) | (2*i+1);
   }
 }
 
@@ -70,7 +70,7 @@
   bool ok = true;
   int i = 0;
   for (i = 0; i < nlines; i++){
-    int expected = (i << 16) | i;
+    int expected = ((2*i + 0) << 16) | (2*i+1);
     if (buf[i] != expected){
       ok = false;
       printf("buf[%d] = 0x%x  expected = 0x%x\n", i, buf[i], expected);
@@ -98,11 +98,15 @@
   u2_init();
 
   // setup tx gpio bits for GPIOM_FPGA_1 -- fpga debug output
-  hal_gpio_set_tx_mode(15, 0, GPIOM_FPGA_1);
-  hal_gpio_set_rx_mode(15, 0, GPIOM_FPGA_1);
+  hal_gpio_set_tx_mode(15, 0, GPIOM_FPGA_0);
+  hal_gpio_set_rx_mode(15, 0, GPIOM_FPGA_0);
 
   putstr("\nsd_gentest\n");
   
+  // Set up serdes
+  //output_regs->serdes_ctrl = (SERDES_ENABLE | SERDES_RXEN | SERDES_LOOPEN);
+  output_regs->serdes_ctrl = (SERDES_ENABLE | SERDES_RXEN);
+
   init_packets();
 
   // pic_register_handler(IRQ_TIMER, timer_irq_handler);
@@ -113,16 +117,25 @@
   // start a receive from sd
   zero_buffer(SERDES_RX_BUF);
   bp_receive_to_buf(SERDES_RX_BUF, PORT_SERDES, 1, 0, BP_LAST_LINE);
-  hal_set_timeout(timer_delta);
 
   // fire off the first packet
   bp_send_from_buf(SERDES_TX_BUF, PORT_SERDES, 1, 0, NLINES_PER_PKT);
+  hal_set_timeout(timer_delta);
 
+
+  int counter = 0;
+
+#define EXPECTING_PKT() ((counter & 0x1) == 0)
+#define        SEND_PKT()      ((counter & 0x1) != 0)
+
+  bool got_packet = false;
+
   while(1){
     uint32_t status = buffer_pool_status->status;
 
     if (status & (BPS_DONE(SERDES_RX_BUF))){
       bp_clear_buf(SERDES_RX_BUF);
+      got_packet = true;
 
       hal_toggle_leds(0x2);
 
@@ -131,47 +144,57 @@
       bool ok = check_packet(buffer_ram(SERDES_RX_BUF), last_line);
       
       if (ok)
-       putchar('.');
+       putchar('r');
       else
        putchar('P');
 
       // start a receive from sd
       zero_buffer(SERDES_RX_BUF);
       bp_receive_to_buf(SERDES_RX_BUF, PORT_SERDES, 1, 0, BP_LAST_LINE);
-      hal_set_timeout(timer_delta);
     }
 
     if (status & (BPS_ERROR(SERDES_RX_BUF))){
       bp_clear_buf(SERDES_RX_BUF);
+      got_packet = true;
+
       putchar('E');
 
       // start a receive from sd
       zero_buffer(SERDES_RX_BUF);
       bp_receive_to_buf(SERDES_RX_BUF, PORT_SERDES, 1, 0, BP_LAST_LINE);
-      hal_set_timeout(timer_delta);
     }
 
     if (status & (BPS_DONE(SERDES_TX_BUF))){
       bp_clear_buf(SERDES_TX_BUF);
-
+      putchar('t');
       hal_toggle_leds(0x1);
-
-      // send another packet
-      bp_send_from_buf(SERDES_TX_BUF, PORT_SERDES, 1, 0, NLINES_PER_PKT);
     }
 
     if (status & BPS_ERROR(SERDES_TX_BUF)){
       bp_clear_buf(SERDES_TX_BUF);
-      putchar('e');
-      bp_send_from_buf(SERDES_TX_BUF, PORT_SERDES, 1, 0, NLINES_PER_PKT);
+      putchar('X');
     }
 
+#if 1
     int pending = pic_regs->pending;
-    if (pending & PIC_TIMER_INT){              // are we missing a packet?
+    if (pending & PIC_TIMER_INT){
       hal_set_timeout(timer_delta);
+
+      if (EXPECTING_PKT()){
+       if (!got_packet)
+         putchar('T');
+       got_packet = false;
+      }
+
+      if (SEND_PKT()){
+       if (status & BPS_IDLE(SERDES_TX_BUF))
+         bp_send_from_buf(SERDES_TX_BUF, PORT_SERDES, 1, 0, NLINES_PER_PKT);
+      }
+      counter++;
+
       pic_regs->pending = PIC_TIMER_INT;       // clear pending interrupt
-      putchar('T');
     }
+#endif
   }
 
   return 1;





reply via email to

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