commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r6036 - gnuradio/branches/developers/matt/u2f/firmware


From: matt
Subject: [Commit-gnuradio] r6036 - gnuradio/branches/developers/matt/u2f/firmware
Date: Thu, 19 Jul 2007 18:07:41 -0600 (MDT)

Author: matt
Date: 2007-07-19 18:07:41 -0600 (Thu, 19 Jul 2007)
New Revision: 6036

Modified:
   gnuradio/branches/developers/matt/u2f/firmware/test1_main.c
Log:
double buffering demo


Modified: gnuradio/branches/developers/matt/u2f/firmware/test1_main.c
===================================================================
--- gnuradio/branches/developers/matt/u2f/firmware/test1_main.c 2007-07-20 
00:06:36 UTC (rev 6035)
+++ gnuradio/branches/developers/matt/u2f/firmware/test1_main.c 2007-07-20 
00:07:41 UTC (rev 6036)
@@ -17,14 +17,69 @@
 
 void int_handler_func () __attribute__ ((interrupt_handler));
 
-void int_handler_func () {
+void int_handler_func () {}
+void double_buffering();
+
+int
+main(void)
+{
   int i;
+
+  u2_init();
+
+  // Control LEDs
+  output_regs->leds = 0x02;
+
+  // Turn on ADCs
+  output_regs->adc_ctrl = 0x0A;
+
+  // Set up TX Chain
+  dsp_tx_regs->freq = 0;
+  dsp_tx_regs->scale_i = 1;
+  dsp_tx_regs->scale_q = 1;
+  dsp_tx_regs->interp_rate = 32;
+
+  // Set up RX Chain
+  dsp_rx_regs->freq = 0;
+  dsp_rx_regs->scale_i = 1;
+  dsp_rx_regs->scale_q = 1;
+  dsp_rx_regs->decim_rate = 32;
+
+  // Set up buffer control, using only 4 for now
+  for(i=0;i<4;i++) 
+    buffer_state[i] = EMPTY;
+
+  // Set up DSP RX
+  buffer_state[0] = FILLING;
+  serdes_tx_idle = 1;
+  receive_to_buf(0, 1, 1, 10, 509);  // DSP_RX to buffer 0, use 500 lines
+
+  dsp_rx_regs->run_rx = 1;           // Start DSP_RX
+  sim_puts("Done DSP RX setup\n");
+
+  // Set up serdes RX
+  buffer_state[2] = FILLING;
+  dsp_tx_idle = 1;
+  receive_to_buf(2, 0, 1, 5, 504);
+
+  dsp_tx_regs->run_tx = 1;
+  sim_puts("Done DSP TX setup\n");
+
+  while(1) {
+    double_buffering();
+  }
+
+  sim_finish();
+  return 1;
+}
+
+void 
+double_buffering() {
   unsigned int *status = (unsigned int *) 0xB020;
   unsigned int localstatus = *status;
 
   if(localstatus & 1) {
     clear_buf(0);
-    
     if(buffer_state[0] == FILLING) {
       buffer_state[0] = FULL;
       if(buffer_state[1] == EMPTY) {
@@ -43,7 +98,7 @@
       buffer_state[0] = EMPTY;
       if(dsp_rx_idle) {
        dsp_rx_idle = 0;
-       receive_to_buf(0, 1, 1, 10, 509);  // DSP_RX to buffer 1, use 500 lines
+       receive_to_buf(0, 1, 1, 10, 509);  // DSP_RX to buffer 0, use 500 lines
        buffer_state[0] = FILLING;
       }
       if(buffer_state[1] == FULL) {
@@ -53,6 +108,7 @@
       else
        serdes_tx_idle = 1;
     }
+    sim_puts("Int Proc'ed 0\n");
   }
   if(localstatus & 2) {
     clear_buf(1);
@@ -84,67 +140,74 @@
       else
        serdes_tx_idle = 1;
     }
+  sim_puts("Int Proc'ed 1\n");
   }
-  sim_puts("Int Proc'ed\n");
+  if(localstatus & 4) {
+    clear_buf(2);
+    if(buffer_state[2] == FILLING) {
+      buffer_state[2] = FULL;
+      if(buffer_state[3] == EMPTY) {
+       receive_to_buf(3, 0, 1, 5, 504);  // SERDES_RX to buffer 3, use 500 
lines
+       buffer_state[3] = FILLING;
+      }
+      else
+       serdes_rx_idle = 1;
+      if(dsp_tx_idle) {
+       dsp_tx_idle = 0;
+       send_from_buf(2, 1, 1, 5, 504);  // DSP_TX from buffer 2
+       buffer_state[2] = EMPTYING;
+      }
+    }
+    else {  // buffer was emptying
+      buffer_state[2] = EMPTY;
+      if(serdes_rx_idle) {
+       serdes_rx_idle = 0;
+       receive_to_buf(2, 0, 1, 5, 504);  // SERDES_RX to buffer 2
+       buffer_state[2] = FILLING;
+      }
+      if(buffer_state[3] == FULL) {
+       send_from_buf(3, 1, 1, 5, 504);  // DSP_TX from buffer 3
+       buffer_state[3] = EMPTYING;
+      }
+      else
+       dsp_tx_idle = 1;
+    }
+  sim_puts("Int Proc'ed 2\n");
+  }
+  if(localstatus & 8) {
+    clear_buf(3);
+    if(buffer_state[3] == FILLING) {
+      buffer_state[3] = FULL;
+      if(buffer_state[2] == EMPTY) {
+       receive_to_buf(2, 0, 1, 5, 504);  // SERDES_RX to buffer 2, use 500 
lines
+       buffer_state[2] = FILLING;
+      }
+      else
+       serdes_rx_idle = 1;
+      if(dsp_tx_idle) {
+       dsp_tx_idle = 0;
+       send_from_buf(3, 1, 1, 5, 504);  // DSP_TX from buffer 3
+       buffer_state[3] = EMPTYING;
+      }
+    }
+    else {  // buffer was emptying
+      buffer_state[3] = EMPTY;
+      if(serdes_rx_idle) {
+       serdes_rx_idle = 0;
+       receive_to_buf(3, 0, 1, 5, 504);  // SERDES_RX to buffer 3
+       buffer_state[3] = FILLING;
+      }
+      if(buffer_state[2] == FULL) {
+       send_from_buf(2, 1, 1, 5, 504);  // DSP_TX from buffer 2
+       buffer_state[2] = EMPTYING;
+      }
+      else
+       dsp_tx_idle = 1;
+    }
+  sim_puts("Int Proc'ed 3\n");
+  }
 }
 
-int
-main(void)
-{
-  int i;
-
-  u2_init();
-
-  // Control LEDs
-  output_regs->leds = 0x02;
-
-  // Turn on ADCs
-  output_regs->adc_ctrl = 0x0A;
-
-  // Set up TX Chain
-  dsp_tx_regs->freq = 0;
-  dsp_tx_regs->scale_i = 1;
-  dsp_tx_regs->scale_q = 1;
-  dsp_tx_regs->interp_rate = 32;
-
-  // Set up RX Chain
-  dsp_rx_regs->freq = 0;
-  dsp_rx_regs->scale_i = 1;
-  dsp_rx_regs->scale_q = 1;
-  dsp_rx_regs->decim_rate = 32;
-
-  // Set up buffer control, using only 4 for now
-  for(i=0;i<4;i++) 
-    buffer_state[i] = EMPTY;
-  dsp_rx_buf = -1;
-  dsp_tx_buf = -1;
-  serdes_rx_buf = -1;
-  serdes_tx_buf = -1;
-
-  // Set up DSP RX
-  dsp_rx_buf = 0;
-  buffer_state[0] = FILLING;
-  serdes_tx_idle = 1;
-  receive_to_buf(0, 1, 1, 10, 509);  // DSP_RX to buffer 0, use 500 lines
-
-  dsp_rx_regs->run_rx = 1;           // Start DSP_RX
-  sim_puts("Done DSP RX setup\n");
-
-  // Set up serdes TX
-  serdes_tx_buf = 0;
-
-
-  // Set SERDES RX
-  //receive_to_buf(2, 0, 1, 5, 504);   // SERDES_RX to buffer 2, use 500 lines
-
-  //dsp_tx_regs->run_tx = 1;
-  
-  while(1) {};
-  sim_finish();
-  return 1;
-}
-
-
 // Spare Code
 
 #if 0  





reply via email to

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