From ecedbbef4c735f342ab3ec2714638b9f70726a4f Mon Sep 17 00:00:00 2001 From: Robert Jordens Date: Mon, 29 Feb 2016 19:20:07 +0100 Subject: [PATCH] runtime/ttl: use rtio_output and rtio_input_wait --- artiq/runtime/ttl.c | 42 +++++------------------------------------- 1 file changed, 5 insertions(+), 37 deletions(-) diff --git a/artiq/runtime/ttl.c b/artiq/runtime/ttl.c index db75207d4..bdd6d82b3 100644 --- a/artiq/runtime/ttl.c +++ b/artiq/runtime/ttl.c @@ -6,53 +6,24 @@ void ttl_set_o(long long int timestamp, int channel, int value) { - rtio_chan_sel_write(channel); - rtio_o_timestamp_write(timestamp); - rtio_o_address_write(0); - rtio_o_data_write(value); - rtio_write_and_process_status(timestamp, channel); + rtio_output(timestamp, channel, 0, value); } void ttl_set_oe(long long int timestamp, int channel, int oe) { - rtio_chan_sel_write(channel); - rtio_o_timestamp_write(timestamp); - rtio_o_address_write(1); - rtio_o_data_write(oe); - rtio_write_and_process_status(timestamp, channel); + rtio_output(timestamp, channel, 1, oe); } void ttl_set_sensitivity(long long int timestamp, int channel, int sensitivity) { - rtio_chan_sel_write(channel); - rtio_o_timestamp_write(timestamp); - rtio_o_address_write(2); - rtio_o_data_write(sensitivity); - rtio_write_and_process_status(timestamp, channel); + rtio_output(timestamp, channel, 2, sensitivity); } long long int ttl_get(int channel, long long int time_limit) { long long int r; - int status; - rtio_chan_sel_write(channel); - while((status = rtio_i_status_read())) { - if(status & RTIO_I_STATUS_OVERFLOW) { - rtio_i_overflow_reset_write(1); - artiq_raise_from_c("RTIOOverflow", - "RTIO overflow at channel {0}", - channel, 0, 0); - } - if(rtio_get_counter() >= time_limit) { - /* check empty flag again to prevent race condition. - * now we are sure that the time limit has been exceeded. - */ - if(rtio_i_status_read() & RTIO_I_STATUS_EMPTY) - return -1; - } - /* input FIFO is empty - keep waiting */ - } + rtio_input_wait(time_limit, channel); r = rtio_i_timestamp_read(); rtio_i_re_write(1); return r; @@ -60,8 +31,5 @@ long long int ttl_get(int channel, long long int time_limit) void ttl_clock_set(long long int timestamp, int channel, int ftw) { - rtio_chan_sel_write(channel); - rtio_o_timestamp_write(timestamp); - rtio_o_data_write(ftw); - rtio_write_and_process_status(timestamp, channel); + rtio_output(timestamp, channel, 0, ftw); }