From: Pavel Pisa Date: Sun, 22 Feb 2015 14:39:10 +0000 (+0100) Subject: TUMBL firmware check for RX error and skips ADC reads in error case. X-Git-Url: http://rtime.felk.cvut.cz/gitweb/fpga/lx-cpu1/lx-rocon.git/commitdiff_plain/e1fa5c694cb9cd630431485716176070116aaeb9?ds=sidebyside TUMBL firmware check for RX error and skips ADC reads in error case. The firmware supplies previous read current value in error case and increments RX error counter. Signed-off-by: Pavel Pisa --- diff --git a/hw/lx-rocon_firmware/firmware.c b/hw/lx-rocon_firmware/firmware.c index a117a62..c7cc60d 100644 --- a/hw/lx-rocon_firmware/firmware.c +++ b/hw/lx-rocon_firmware/firmware.c @@ -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++; } } diff --git a/hw/lx-rocon_firmware/pxmcc_types.h b/hw/lx-rocon_firmware/pxmcc_types.h index afad06c..70481e0 100644 --- a/hw/lx-rocon_firmware/pxmcc_types.h +++ b/hw/lx-rocon_firmware/pxmcc_types.h @@ -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;