mirror of https://github.com/m-labs/artiq.git
rtio: raise input overflow exception
This commit is contained in:
parent
9a14081031
commit
5105b88302
|
@ -13,7 +13,8 @@ class OutOfMemory(RuntimeException):
|
||||||
|
|
||||||
|
|
||||||
class RTIOUnderflow(RuntimeException):
|
class RTIOUnderflow(RuntimeException):
|
||||||
"""Raised when the CPU fails to submit a RTIO event early enough (with respect to the event's timestamp).
|
"""Raised when the CPU fails to submit a RTIO event early enough
|
||||||
|
(with respect to the event's timestamp).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
eid = 1
|
eid = 1
|
||||||
|
@ -28,6 +29,14 @@ class RTIOSequenceError(RuntimeException):
|
||||||
eid = 2
|
eid = 2
|
||||||
|
|
||||||
|
|
||||||
|
class RTIOOverflow(RuntimeException):
|
||||||
|
"""Raised when at least one event could not be registered into the RTIO
|
||||||
|
input FIFO because it was full (CPU not reading fast enough).
|
||||||
|
|
||||||
|
"""
|
||||||
|
eid = 3
|
||||||
|
|
||||||
|
|
||||||
exception_map = {e.eid: e for e in globals().values()
|
exception_map = {e.eid: e for e in globals().values()
|
||||||
if inspect.isclass(e)
|
if inspect.isclass(e)
|
||||||
and issubclass(e, RuntimeException)
|
and issubclass(e, RuntimeException)
|
||||||
|
|
|
@ -4,7 +4,8 @@
|
||||||
enum {
|
enum {
|
||||||
EID_OUT_OF_MEMORY = 0,
|
EID_OUT_OF_MEMORY = 0,
|
||||||
EID_RTIO_UNDERFLOW = 1,
|
EID_RTIO_UNDERFLOW = 1,
|
||||||
EID_RTIO_SEQUENCE_ERROR = 2
|
EID_RTIO_SEQUENCE_ERROR = 2,
|
||||||
|
EID_RTIO_OVERFLOW = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
int exception_setjmp(void *jb) __attribute__((returns_twice));
|
int exception_setjmp(void *jb) __attribute__((returns_twice));
|
||||||
|
|
|
@ -59,6 +59,11 @@ long long int rtio_get(int channel)
|
||||||
|
|
||||||
rtio_chan_sel_write(channel);
|
rtio_chan_sel_write(channel);
|
||||||
while(rtio_i_readable_read() || (rtio_o_level_read() != 0)) {
|
while(rtio_i_readable_read() || (rtio_o_level_read() != 0)) {
|
||||||
|
if(rtio_i_overflow_read()) {
|
||||||
|
rtio_reset_logic_write(1);
|
||||||
|
rtio_reset_logic_write(0);
|
||||||
|
exception_raise(EID_RTIO_OVERFLOW);
|
||||||
|
}
|
||||||
if(rtio_i_readable_read()) {
|
if(rtio_i_readable_read()) {
|
||||||
r = rtio_i_timestamp_read();
|
r = rtio_i_timestamp_read();
|
||||||
rtio_i_re_write(1);
|
rtio_i_re_write(1);
|
||||||
|
|
Loading…
Reference in New Issue