mirror of https://github.com/m-labs/artiq.git
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)
|
void ttl_set_o(long long int timestamp, int channel, int value)
|
||||||
{
|
{
|
||||||
rtio_chan_sel_write(channel);
|
rtio_output(timestamp, channel, 0, value);
|
||||||
rtio_o_timestamp_write(timestamp);
|
|
||||||
rtio_o_address_write(0);
|
|
||||||
rtio_o_data_write(value);
|
|
||||||
rtio_write_and_process_status(timestamp, channel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ttl_set_oe(long long int timestamp, int channel, int oe)
|
void ttl_set_oe(long long int timestamp, int channel, int oe)
|
||||||
{
|
{
|
||||||
rtio_chan_sel_write(channel);
|
rtio_output(timestamp, channel, 1, oe);
|
||||||
rtio_o_timestamp_write(timestamp);
|
|
||||||
rtio_o_address_write(1);
|
|
||||||
rtio_o_data_write(oe);
|
|
||||||
rtio_write_and_process_status(timestamp, channel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ttl_set_sensitivity(long long int timestamp, int channel, int sensitivity)
|
void ttl_set_sensitivity(long long int timestamp, int channel, int sensitivity)
|
||||||
{
|
{
|
||||||
rtio_chan_sel_write(channel);
|
rtio_output(timestamp, channel, 2, sensitivity);
|
||||||
rtio_o_timestamp_write(timestamp);
|
|
||||||
rtio_o_address_write(2);
|
|
||||||
rtio_o_data_write(sensitivity);
|
|
||||||
rtio_write_and_process_status(timestamp, channel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
long long int ttl_get(int channel, long long int time_limit)
|
long long int ttl_get(int channel, long long int time_limit)
|
||||||
{
|
{
|
||||||
long long int r;
|
long long int r;
|
||||||
int status;
|
|
||||||
|
|
||||||
rtio_chan_sel_write(channel);
|
rtio_input_wait(time_limit, 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 */
|
|
||||||
}
|
|
||||||
r = rtio_i_timestamp_read();
|
r = rtio_i_timestamp_read();
|
||||||
rtio_i_re_write(1);
|
rtio_i_re_write(1);
|
||||||
return r;
|
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)
|
void ttl_clock_set(long long int timestamp, int channel, int ftw)
|
||||||
{
|
{
|
||||||
rtio_chan_sel_write(channel);
|
rtio_output(timestamp, channel, 0, ftw);
|
||||||
rtio_o_timestamp_write(timestamp);
|
|
||||||
rtio_o_data_write(ftw);
|
|
||||||
rtio_write_and_process_status(timestamp, channel);
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue