]> rtime.felk.cvut.cz Git - fpga/lx-cpu1/lx-rocon.git/commitdiff
TUMBL firmware check for RX error and skips ADC reads in error case.
authorPavel Pisa <ppisa@pikron.com>
Sun, 22 Feb 2015 14:39:10 +0000 (15:39 +0100)
committerPavel Pisa <ppisa@pikron.com>
Sun, 22 Feb 2015 14:39:10 +0000 (15:39 +0100)
The firmware supplies previous read current value in error case
and increments RX error counter.

Signed-off-by: Pavel Pisa <ppisa@pikron.com>
hw/lx-rocon_firmware/firmware.c
hw/lx-rocon_firmware/pxmcc_types.h

index a117a62e0fba18f8b3d9f0777a1ae8b05a5bfa14..c7cc60d210b04e8905f53481da43fc1840e740cc 100644 (file)
@@ -369,19 +369,30 @@ void main(void)
       volatile uint32_t *siroladc = FPGA_LX_MASTER_RX_ADC0;
       uint32_t val;
 
-      for (i = 0; i < PXMCC_CURADC_CHANNELS; ) {
-        val = *siroladc;
+      if (!(last_rx_done_sqn & 0x8000)) {
+        for (i = 0; i < PXMCC_CURADC_CHANNELS; ) {
+          val = *siroladc;
 
-        curadc->cur_val = (uint16_t)(val - curadc->siroladc_last) -
+          curadc->cur_val = (uint16_t)(val - curadc->siroladc_last) -
                           curadc->siroladc_offs;
-        curadc->siroladc_last = val;
-
-        i++;
-        curadc += 1;
-        siroladc += 2;
-        /* additional 3 required for 7 -> 8 change */
-        if (!(i & 7))
-          siroladc += 3;
+          curadc->siroladc_last = val;
+
+          i++;
+          curadc += 1;
+          siroladc += 2;
+          /* additional 3 required for 7 -> 8 change */
+          if (!(i & 7))
+            siroladc += 3;
+        }
+      } else {
+        pxmcc_curadc_data_t *curadc = pxmcc_data.curadc;
+
+        for (i = 0; i < PXMCC_CURADC_CHANNELS; ) {
+          curadc->siroladc_last += curadc->cur_val;
+          i++;
+          curadc += 1;
+        }
+        pxmcc_data.common.rx_err_cnt++;
       }
     }
 
index afad06c571ebcb318509dbd63c92da009ef5db45..70481e01af7a1caae71d2d0c602be0f8aced13f6 100644 (file)
@@ -35,6 +35,7 @@ typedef struct pxmcc_common_data_t {
   uint32_t  act_idle;
   uint32_t  min_idle;
   uint32_t  rx_done_sqn;
+  uint32_t  rx_err_cnt;
   uint32_t  irc_base;
 } pxmcc_common_data_t;