DMA: speed up playback

Time reduced from 1.53µs to 1.37µs.
This commit is contained in:
Sebastien Bourdeauducq 2017-04-19 10:59:12 +08:00
parent 41c4de4556
commit e8f7f8ef9c
2 changed files with 16 additions and 14 deletions

View File

@ -398,19 +398,21 @@ extern fn dma_playback(timestamp: i64, ptr: i32) {
csr::cri_con::selected_write(0); csr::cri_con::selected_write(0);
let status = csr::rtio_dma::error_status_read(); let status = csr::rtio_dma::error_status_read();
let timestamp = csr::rtio_dma::error_timestamp_read(); if status != 0 {
let channel = csr::rtio_dma::error_channel_read(); let timestamp = csr::rtio_dma::error_timestamp_read();
if status & rtio::RTIO_O_STATUS_UNDERFLOW != 0 { let channel = csr::rtio_dma::error_channel_read();
csr::rtio_dma::error_underflow_reset_write(1); if status & rtio::RTIO_O_STATUS_UNDERFLOW != 0 {
raise!("RTIOUnderflow", csr::rtio_dma::error_underflow_reset_write(1);
"RTIO underflow at {0} mu, channel {1}", raise!("RTIOUnderflow",
timestamp as i64, channel as i64, 0) "RTIO underflow at {0} mu, channel {1}",
} timestamp as i64, channel as i64, 0)
if status & rtio::RTIO_O_STATUS_SEQUENCE_ERROR != 0 { }
csr::rtio_dma::error_sequence_error_reset_write(1); if status & rtio::RTIO_O_STATUS_SEQUENCE_ERROR != 0 {
raise!("RTIOSequenceError", csr::rtio_dma::error_sequence_error_reset_write(1);
"RTIO sequence error at {0} mu, channel {1}", raise!("RTIOSequenceError",
timestamp as i64, channel as i64, 0) "RTIO sequence error at {0} mu, channel {1}",
timestamp as i64, channel as i64, 0)
}
} }
} }
} }

View File

@ -605,7 +605,7 @@ class DMATest(ExperimentCase):
exp.playback_many(count) exp.playback_many(count)
dt = self.dataset_mgr.get("dma_playback_time") dt = self.dataset_mgr.get("dma_playback_time")
print("dt={}, dt/count={}".format(dt, dt/count)) print("dt={}, dt/count={}".format(dt, dt/count))
self.assertLess(dt/count, 7*us) self.assertLess(dt/count, 3*us)
def test_handle_invalidation(self): def test_handle_invalidation(self):
exp = self.create(_DMA) exp = self.create(_DMA)