sysclk-lwla: Fix calculation of the running sample count.

Field 7 of the status response is actually a duration in
milliseconds at all samplerates but 125 MHz.
This commit is contained in:
Daniel Elstner 2014-01-14 01:28:00 +01:00 committed by Uwe Hermann
parent 5874e88d83
commit 8a3ddd8815
1 changed files with 11 additions and 4 deletions

View File

@ -341,6 +341,8 @@ static void issue_stop_capture(const struct sr_dev_inst *sdi)
*/ */
static void process_capture_status(const struct sr_dev_inst *sdi) static void process_capture_status(const struct sr_dev_inst *sdi)
{ {
uint64_t duration;
uint64_t timescale;
struct dev_context *devc; struct dev_context *devc;
struct acquisition_state *acq; struct acquisition_state *acq;
@ -358,12 +360,17 @@ static void process_capture_status(const struct sr_dev_inst *sdi)
* in the FPGA. These fields are definitely less than 64 bit wide * in the FPGA. These fields are definitely less than 64 bit wide
* internally, and the unused bits occasionally even contain garbage. * internally, and the unused bits occasionally even contain garbage.
*/ */
acq->mem_addr_fill = LWLA_READ32(&acq->xfer_buf_in[0]); acq->mem_addr_fill = LWLA_READ32(&acq->xfer_buf_in[0]);
acq->captured_samples = LWLA_READ32(&acq->xfer_buf_in[8]) duration = LWLA_READ32(&acq->xfer_buf_in[8]);
* (uint64_t)100000; acq->capture_flags = LWLA_READ32(&acq->xfer_buf_in[16])
acq->capture_flags = LWLA_READ32(&acq->xfer_buf_in[16])
& STATUS_FLAG_MASK; & STATUS_FLAG_MASK;
/* The 125 MHz setting is special, and uses the same timebase
* for the duration field as the 100 MHz setting.
*/
timescale = MIN(devc->samplerate, SR_MHZ(100));
acq->captured_samples = (duration * timescale) / 1000;
sr_spew("Captured %lu words, %" PRIu64 " samples, flags 0x%02X", sr_spew("Captured %lu words, %" PRIu64 " samples, flags 0x%02X",
(unsigned long)acq->mem_addr_fill, (unsigned long)acq->mem_addr_fill,
acq->captured_samples, acq->capture_flags); acq->captured_samples, acq->capture_flags);