forked from M-Labs/artiq
runtime/ttl: use rtio_output and rtio_input_wait
This commit is contained in:
parent
5dae9f8aa8
commit
ecedbbef4c
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue