]> rtime.felk.cvut.cz Git - fpga/lx-cpu1/lx-rocon.git/blobdiff - sw/app/rocon/appl_usb.c
Support 8 IRCs, refactorization (IRC and LXMaster registers and wiring)
[fpga/lx-cpu1/lx-rocon.git] / sw / app / rocon / appl_usb.c
index 459e771a06faede50cfb2ea97463cba952ba1cdf..199eac3f3ee536702f2c03ae2083c99db9cdc8ca 100644 (file)
 #define SWAP(x) (x)
 #endif
 
-#define USB_VENDOR_TARGET_TUMBL        0x03
+#define USB_VENDOR_TARGET_TUMBL                   0x03
 
-#define USB_CMD_FPGA_CONFIGURE         0xF000
-#define USB_CMD_FPGA_MEASURE_READ      0xF001
-#define USB_CMD_FPGA_MEASURE_WRITE     0xF002
+#define USB_CMD_FPGA_CONFIGURE                    0xF000
+#define USB_CMD_FPGA_MEASURE_READ                 0xF001
+#define USB_CMD_FPGA_MEASURE_WRITE                0xF002
 
-#define USB_CMD_FPGA_IRC_SET_RESET     0xF010
-#define USB_CMD_FPGA_IRC_DUMP          0xF011
+#define USB_CMD_FPGA_IRC_GET_RESET                0xF010
+#define USB_CMD_FPGA_IRC_SET_RESET                0xF011
+#define USB_CMD_FPGA_IRC_DUMP                     0xF012
 
-#define USB_CMD_FPGA_LXMASTER_WRITE    0xF020
-#define USB_CMD_FPGA_LXMASTER_DUMP     0xF021
+#define USB_CMD_FPGA_LXMASTER_GET_RESET           0xF020
+#define USB_CMD_FPGA_LXMASTER_SET_RESET           0xF021
+#define USB_CMD_FPGA_LXMASTER_TRANSMITTER_GET_REG 0xF022
+#define USB_CMD_FPGA_LXMASTER_TRANSMITTER_SET_REG 0xF023
+#define USB_CMD_FPGA_LXMASTER_TRANSMITTER_WRITE   0xF024
+#define USB_CMD_FPGA_LXMASTER_TRANSMITTER_DUMP    0xF025
 
-#define USB_CMD_FPGA_TUMBL_SET_RESET   0xF100
-#define USB_CMD_FPGA_TUMBL_SET_HALT    0xF101
-#define USB_CMD_FPGA_TUMBL_SET_TRACE   0xF102
-#define USB_CMD_FPGA_TUMBL_KICK_TRACE  0xF103
-#define USB_CMD_FPGA_TUMBL_GET_PC      0xF104
+#define USB_CMD_FPGA_TUMBL_SET_RESET              0xF100
+#define USB_CMD_FPGA_TUMBL_SET_HALT               0xF101
+#define USB_CMD_FPGA_TUMBL_SET_TRACE              0xF102
+#define USB_CMD_FPGA_TUMBL_KICK_TRACE             0xF103
+#define USB_CMD_FPGA_TUMBL_GET_PC                 0xF104
 
-#define USB_CMD_FPGA_TUMBL_DUMP_IMEM   0xF200
-#define USB_CMD_FPGA_TUMBL_DUMP_DMEM   0xF201
+#define USB_CMD_FPGA_TUMBL_DUMP_IMEM              0xF200
+#define USB_CMD_FPGA_TUMBL_DUMP_DMEM              0xF201
 
-#define USB_CMD_FPGA_RESET             0xFFFF
+#define USB_CMD_FPGA_RESET                        0xFFFF
 
 usb_device_t usb_device;
 usb_ep_t eps[NUM_ENDPOINTS];
@@ -144,7 +149,7 @@ static int usb_tumbl_pkt_wr(struct usb_ep_t *ep, int len, int code)
 {
   unsigned char *ptr = ep->ptr - len;
 
-  appl_fpga_tumbl_write(ep->user_data, ptr, len);
+  fpga_tumbl_write(ep->user_data, ptr, len);
 
   ep->user_data += len;
   ep->ptr = ep0_buffer;
@@ -181,56 +186,76 @@ uint16_t appl_usb_vendor_call(uint16_t command, uint16_t argument)
   switch (command)
   {
     case USB_CMD_FPGA_CONFIGURE:
-      return appl_fpga_configure();
+      return fpga_configure();
 
     case USB_CMD_FPGA_MEASURE_READ:
-      return appl_fpga_measure_bus_read();
+      return fpga_measure_bus_read();
 
     case USB_CMD_FPGA_MEASURE_WRITE:
-      return appl_fpga_measure_bus_write();
+      return fpga_measure_bus_write();
+
+    case USB_CMD_FPGA_IRC_GET_RESET:
+      printf("IRC RESET: 0x%02x\n", *fpga_irc_reset);
+      return 0;
 
     case USB_CMD_FPGA_IRC_SET_RESET:
       /* When starting, zero out counters */
-      *irc_reset = argument & 0x0001;
+      *fpga_irc_reset = argument & 0x0001;
       return 0;
 
     case USB_CMD_FPGA_IRC_DUMP:
-      printf("IRC1: count = %d, count index = %d, state = 0x%02x\n", (unsigned int) irc1->count, (unsigned int) irc1->count_index, (unsigned int)(*irc1_state));
-      printf("IRC2: count = %d, count index = %d, state = 0x%02x\n", (unsigned int) irc2->count, (unsigned int) irc2->count_index, (unsigned int)(*irc2_state));
-      printf("IRC3: count = %d, count index = %d, state = 0x%02x\n", (unsigned int) irc3->count, (unsigned int) irc3->count_index, (unsigned int)(*irc3_state));
-      printf("IRC4: count = %d, count index = %d, state = 0x%02x\n", (unsigned int) irc4->count, (unsigned int) irc4->count_index, (unsigned int)(*irc4_state));
+      for (i = 0; i < 8; i++)
+        printf("IRC%d: count = %d, count index = %d, state = 0x%02x\n", i+1, (unsigned int) fpga_irc[i]->count, (unsigned int) fpga_irc[i]->count_index, (unsigned int)(*(fpga_irc_state[i])));
+      return 0;
+
+    case USB_CMD_FPGA_LXMASTER_GET_RESET:
+      printf("LXMASTER RESET: 0x%02x\n", *fpga_lx_master_reset);
+      return 0;
+
+    case USB_CMD_FPGA_LXMASTER_SET_RESET:
+      /* When starting, zero out counters */
+      *fpga_lx_master_reset = argument & 0x0001;
       return 0;
 
-    case USB_CMD_FPGA_LXMASTER_WRITE:
+    case USB_CMD_FPGA_LXMASTER_TRANSMITTER_GET_REG:
+      printf("LXMASTER TRANSMITTER REG: 0x%02x\n", *fpga_lx_master_transmitter_reg);
+      return 0;
+
+    case USB_CMD_FPGA_LXMASTER_TRANSMITTER_SET_REG:
+      /* When starting, zero out counters */
+      *fpga_lx_master_transmitter_reg = argument & 0x0001;
+      return 0;
+
+    case USB_CMD_FPGA_LXMASTER_TRANSMITTER_WRITE:
       for (i = 0; i < (argument / 4); i++)
-       lx_master_base[i] = lx_master_conf[i];
+        fpga_lx_master_transmitter_base[i] = fpga_lx_master_conf[i];
       return 0;
 
-    case USB_CMD_FPGA_LXMASTER_DUMP:
+    case USB_CMD_FPGA_LXMASTER_TRANSMITTER_DUMP:
       printf("LX MASTER MEM:\n");
       for (i = 0; i < 16; i++)
       {
-       for (j = 0; j < 16; j++)
-         printf("%04X ", (unsigned int) (lx_master_base[i*16 + j] & 0xFFFF));
+        for (j = 0; j < 16; j++)
+          printf("%04X ", (unsigned int) (fpga_lx_master_transmitter_base[i*16 + j] & 0xFFFF));
 
-       printf("\n");
+        printf("\n");
       }
       return 0;
 
     case USB_CMD_FPGA_TUMBL_SET_RESET:
-      return appl_fpga_tumbl_set_reset(argument);
+      return fpga_tumbl_set_reset(argument);
 
     case USB_CMD_FPGA_TUMBL_SET_HALT:
-      return appl_fpga_tumbl_set_halt(argument);
+      return fpga_tumbl_set_halt(argument);
 
     case USB_CMD_FPGA_TUMBL_SET_TRACE:
-      return appl_fpga_tumbl_set_trace(argument);
+      return fpga_tumbl_set_trace(argument);
 
     case USB_CMD_FPGA_TUMBL_KICK_TRACE:
-      return appl_fpga_tumbl_kick_trace();
+      return fpga_tumbl_kick_trace();
 
     case USB_CMD_FPGA_TUMBL_GET_PC:
-      printf("Tubml PC: 0x%08X\n", (unsigned int) *tumbl_pc);
+      printf("Tubml PC: 0x%08X\n", (unsigned int) *fpga_tumbl_pc);
       return 0;
 
     case USB_CMD_FPGA_TUMBL_DUMP_IMEM:
@@ -238,7 +263,7 @@ uint16_t appl_usb_vendor_call(uint16_t command, uint16_t argument)
       for (i = 0; i < 64; i++)
       {
         for (j = 0; j < 8; j++)
-          printf("%08X ", (unsigned int) tumbl_imem[i*8 + j]);
+          printf("%08X ", (unsigned int) fpga_tumbl_imem[i*8 + j]);
 
         printf("\n");
       }
@@ -249,7 +274,7 @@ uint16_t appl_usb_vendor_call(uint16_t command, uint16_t argument)
       for (i = 0; i < 128; i++)
       {
         for (j = 0; j < 8; j++)
-          printf("%08X ", (unsigned int) tumbl_dmem[i*8 + j]);
+          printf("%08X ", (unsigned int) fpga_tumbl_dmem[i*8 + j]);
 
         printf("\n");
       }
@@ -463,6 +488,7 @@ int usb_app_poll(void)
   {
     ep1_tx_chars = usb_udev_read_endpoint(&eps[1], ep1_tx_buff, USB_MAX_PACKET);
     ep1_tx_index = 0;
+    printf("USBCON - recv'd %d chars\n", ep1_tx_chars);
     usb_device.ep_events &= ~MASK_EP1TX;
     hal_gpio_set_value(LED2_PIN, 0);
     usb_active = 1;
@@ -487,6 +513,7 @@ int cmd_io_getc_usbcon(struct cmd_io *cmd_io)
   if (ep1_tx_index >= ep1_tx_chars)
     return -1;
 
+  printf("USBCON - getc: %c\n", ep1_tx_buff[ep1_tx_index]);
   return ep1_tx_buff[ep1_tx_index++];
 }