commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r7967 - in usrp2/trunk/firmware: apps include


From: eb
Subject: [Commit-gnuradio] r7967 - in usrp2/trunk/firmware: apps include
Date: Fri, 7 Mar 2008 23:16:46 -0700 (MST)

Author: eb
Date: 2008-03-07 23:16:45 -0700 (Fri, 07 Mar 2008)
New Revision: 7967

Modified:
   usrp2/trunk/firmware/apps/app_common.c
   usrp2/trunk/firmware/apps/app_passthru.c
   usrp2/trunk/firmware/apps/eth_to_serdes.c
   usrp2/trunk/firmware/include/usrp2_eth_packet.h
Log:
work-in-progress: read time

Modified: usrp2/trunk/firmware/apps/app_common.c
===================================================================
--- usrp2/trunk/firmware/apps/app_common.c      2008-03-08 03:09:14 UTC (rev 
7966)
+++ usrp2/trunk/firmware/apps/app_common.c      2008-03-08 06:16:45 UTC (rev 
7967)
@@ -52,6 +52,22 @@
   reply_pkt->fixed.timestamp = timer_regs->time;
 }
 
+static void
+send_reply(unsigned char *reply, size_t reply_len)
+{
+  if (reply_len < 64)
+    reply_len = 64;
+
+  // wait for buffer to become idle
+  while((buffer_pool_status->status & BPS_IDLE(CPU_TX_BUF)) == 0)
+    ;
+
+  // copy reply into CPU_TX_BUF
+  memcpy_wa(buffer_ram(CPU_TX_BUF), reply, reply_len);
+  bp_send_from_buf(CPU_TX_BUF, PORT_ETH, 1, 0, (reply_len + 3)/ 4);
+}
+
+
 void
 handle_control_chan_frame(u2_eth_packet_t *pkt, size_t len)
 {
@@ -73,23 +89,15 @@
     {
       op_id_reply_t *r = (op_id_reply_t *) s;
       reply_len = sizeof(u2_eth_packet_t) + sizeof(op_id_reply_t);
-      if (reply_len < 64)
-       reply_len = 64;
       r->opcode = OP_ID_REPLY;
       r->len = sizeof(op_id_reply_t);
-      r->rid_mbz = 0;          // FIXME
+      r->rid_mbz = ((op_id_t *) p)->rid_mbz;
       r->addr = *ethernet_mac_addr();
       r->hw_rev = 0x0000;      // FIXME
       // r->fpga_md5sum = ;    // FIXME
       // r->sw_md5sum = ;      // FIXME
     }
-
-    // FIXME need to see if ethernet tx is busy
-
-    // copy reply into CPU_TX_BUF
-    memcpy_wa(buffer_ram(CPU_TX_BUF), reply, reply_len);
-
-    bp_send_from_buf(CPU_TX_BUF, PORT_ETH, 1, 0, reply_len / 4);
+    send_reply(reply, reply_len);
     break;
     
   case OP_START_RX:
@@ -108,6 +116,20 @@
     burn_mac_addr((op_burn_mac_addr_t *) p);
     break;
 
+  case OP_READ_TIME:
+    memset(reply, 0, sizeof(reply));
+    set_reply_hdr((u2_eth_packet_t *) reply, pkt);
+    {
+      op_read_time_reply_t *r = (op_read_time_reply_t *) s;
+      reply_len = sizeof(u2_eth_packet_t) + sizeof(op_read_time_reply_t);
+      r->opcode = OP_READ_TIME_REPLY;
+      r->len = sizeof(op_read_time_reply_t);
+      r->rid_mbz = ((op_read_time_t *) p)->rid_mbz;
+      r->time = timer_regs->time;
+    }
+    send_reply(reply, reply_len);
+    break;
+
   default:
     break;
   }
@@ -125,7 +147,7 @@
   u2_eth_packet_t *pkt = (u2_eth_packet_t *) buffer_ram(bufno);
   size_t byte_len = (buffer_pool_status->last_line[bufno] - 3) * 4;
 
-  // hal_toggle_leds(0x1);
+  hal_toggle_leds(0x1);
 
   // inspect rcvd frame and figure out what do do.
 
@@ -144,10 +166,11 @@
   default:
     if((pkt->thdr.seqno) == exp_seqno){
       exp_seqno++;
+      putchar('.');
     }
     else {
       //putchar('S');
-      printf("S%d %d ",exp_seqno,pkt->thdr.seqno);
+      //printf("S%d %d ",exp_seqno,pkt->thdr.seqno);
       exp_seqno = pkt->thdr.seqno + 1;
     }
     return false;      // pass it on to Tx DSP
@@ -169,11 +192,10 @@
 void
 config_tx_cmd(op_config_tx_t *p)
 {
-  // printf("config_tx_cmd: interp = %d\n", p->interp);
+  printf("config_tx_cmd: interp = %d\n", p->interp);
   // print_rmon_regs();
 
   dsp_tx_regs->freq = p->phase_inc;
   dsp_tx_regs->scale_iq = p->scale_iq;
   dsp_tx_regs->interp_rate = p->interp - 1;    // register gets N-1
 }
-

Modified: usrp2/trunk/firmware/apps/app_passthru.c
===================================================================
--- usrp2/trunk/firmware/apps/app_passthru.c    2008-03-08 03:09:14 UTC (rev 
7966)
+++ usrp2/trunk/firmware/apps/app_passthru.c    2008-03-08 06:16:45 UTC (rev 
7967)
@@ -106,7 +106,7 @@
   u2_eth_packet_t *pkt = (u2_eth_packet_t *) buffer_ram(bufno);
   size_t byte_len = (buffer_pool_status->last_line[bufno] - 3) * 4;
 
-  // hal_toggle_leds(0x1);
+  hal_toggle_leds(0x1);
 
   // inspect rcvd frame and figure out what do do.
 
@@ -140,7 +140,7 @@
 void
 config_tx_cmd(op_config_tx_t *p)
 {
-  // printf("config_tx_cmd: interp = %d\n", p->interp);
+  printf("config_tx_cmd: interp = %d\n", p->interp);
   // print_rmon_regs();
 
   dsp_tx_regs->freq = p->phase_inc;

Modified: usrp2/trunk/firmware/apps/eth_to_serdes.c
===================================================================
--- usrp2/trunk/firmware/apps/eth_to_serdes.c   2008-03-08 03:09:14 UTC (rev 
7966)
+++ usrp2/trunk/firmware/apps/eth_to_serdes.c   2008-03-08 06:16:45 UTC (rev 
7967)
@@ -125,8 +125,8 @@
 
 
   // 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);   // no printing...
+  hal_gpio_set_tx_mode(15, 0, GPIOM_FPGA_0);
+  hal_gpio_set_rx_mode(15, 0, GPIOM_FPGA_0);
 
   putstr("\neth_to_serdes\n");
 

Modified: usrp2/trunk/firmware/include/usrp2_eth_packet.h
===================================================================
--- usrp2/trunk/firmware/include/usrp2_eth_packet.h     2008-03-08 03:09:14 UTC 
(rev 7966)
+++ usrp2/trunk/firmware/include/usrp2_eth_packet.h     2008-03-08 06:16:45 UTC 
(rev 7967)
@@ -163,6 +163,8 @@
 #define        OP_READ_REG_REPLY       8
 #define        OP_BURN_MAC_ADDR        9
 #define OP_CONFIG_TX          10
+#define        OP_READ_TIME           11       // What time is it? (100 MHz 
counter)
+#define        OP_READ_TIME_REPLY     12       // This time.
 
 typedef struct {
   uint8_t      opcode;
@@ -220,6 +222,20 @@
   u2_mac_addr_t        addr;
 } op_burn_mac_addr_t;
 
+typedef struct {
+  uint8_t      opcode;
+  uint8_t      len;
+  uint16_t     rid_mbz;
+} op_read_time_t;
+
+typedef struct {
+  uint8_t      opcode;
+  uint8_t      len;
+  uint16_t     rid_mbz;
+  uint32_t     time;
+} op_read_time_reply_t;
+
+
 // union of all of them
 
 typedef union {
@@ -230,6 +246,8 @@
   op_stop_rx_t         op_stop_rx;
   op_config_tx_t       op_config_tx;
   op_burn_mac_addr_t   op_burn_mac_addr;
+  op_read_time_t       op_read_time;
+  op_read_time_reply_t op_read_time_reply;
 } u2_subpkt_t;
 
 





reply via email to

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