]> rtime.felk.cvut.cz Git - fpga/lx-cpu1/lx-rocon.git/blobdiff - sw/app/rocon/appl_pxmc.c
Prepare PXMCC data structures to be better prepared for multiple axes support.
[fpga/lx-cpu1/lx-rocon.git] / sw / app / rocon / appl_pxmc.c
index ab7e038a541e56513824d9ecc1f3f482812c3437..77f16deb41b076c2044ee5b8d08c10cdad639d54 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "appl_defs.h"
 #include "appl_fpga.h"
+#include "pxmcc_types.h"
 
 int pxmc_ptofs_from_index(pxmc_state_t *mcs, unsigned long irc,
                            unsigned long index_irc, int diff2err);
@@ -708,6 +709,7 @@ pxmc_rocon_pwm_dc_out(pxmc_state_t *mcs)
 
 volatile void *pxmc_rocon_rx_data_hist_buff;
 volatile void *pxmc_rocon_rx_data_hist_buff_end;
+int pxmc_rocon_rx_data_hist_mode;
 
 uint32_t pxmc_rocon_rx_last_irq;
 uint32_t pxmc_rocon_rx_cycle_time;
@@ -736,17 +738,30 @@ IRQ_HANDLER_FNC(pxmc_rocon_rx_done_isr)
       pxmc_rocon_rx_data_hist_buff = NULL;
 
     if (pxmc_rocon_rx_data_hist_buff != NULL) {
-      int i;
-      volatile uint32_t *pwm_reg = fpga_lx_master_transmitter_base + 8;
-      volatile uint32_t *rec_reg = fpga_lx_master_receiver_base + 8;
-      uint16_t *pbuf = (uint16_t *)pxmc_rocon_rx_data_hist_buff;
-      for (i = 0; i < 8; i++) {
-        *(pbuf++) = *(rec_reg++);
-      }
-      for (i = 0; i < 8; i++) {
-        *(pbuf++) = *(pwm_reg++);
+      if (pxmc_rocon_rx_data_hist_mode == 0) {
+        int i;
+        volatile uint32_t *pwm_reg = fpga_lx_master_transmitter_base + 8;
+        volatile uint32_t *rec_reg = fpga_lx_master_receiver_base + 8;
+        uint16_t *pbuf = (uint16_t *)pxmc_rocon_rx_data_hist_buff;
+        for (i = 0; i < 8; i++) {
+          *(pbuf++) = *(rec_reg++);
+        }
+        for (i = 0; i < 8; i++) {
+          *(pbuf++) = *(pwm_reg++);
+        }
+        pxmc_rocon_rx_data_hist_buff = pbuf;
+      } else if (pxmc_rocon_rx_data_hist_mode == 1) {
+        int i;
+        uint32_t *pbuf = (uint32_t *)pxmc_rocon_rx_data_hist_buff;
+        pxmcc_data_t *mcc_data = (pxmcc_data_t *)fpga_tumbl_dmem;
+        pxmcc_axis_data_t *mcc_axis = mcc_data->axis + 0;
+        uint32_t *ptumbl = (uint32_t *)mcc_axis;
+
+        for (i = 0; i < 16; i++)
+          *(pbuf++) = *(ptumbl++);
+
+        pxmc_rocon_rx_data_hist_buff = pbuf;
       }
-      pxmc_rocon_rx_data_hist_buff = pbuf;
     }
 
     pxmc_rocon_rx_irq_latency = ROCON_RX_TIM->TC - cr1;