2014-08-28 16:56:48 +08:00
|
|
|
#include <generated/csr.h>
|
|
|
|
|
2015-07-29 19:43:35 +08:00
|
|
|
#include "exceptions.h"
|
2014-08-28 16:56:48 +08:00
|
|
|
#include "rtio.h"
|
|
|
|
|
|
|
|
void rtio_init(void)
|
|
|
|
{
|
2014-11-30 00:13:54 +08:00
|
|
|
rtio_reset_write(1);
|
|
|
|
rtio_reset_write(0);
|
2015-05-02 11:47:11 +08:00
|
|
|
rtio_reset_phy_write(0);
|
2014-08-28 16:56:48 +08:00
|
|
|
}
|
|
|
|
|
2015-05-08 14:44:39 +08:00
|
|
|
long long int rtio_get_counter(void)
|
2014-08-28 16:56:48 +08:00
|
|
|
{
|
2015-05-08 14:44:39 +08:00
|
|
|
rtio_counter_update_write(1);
|
|
|
|
return rtio_counter_read();
|
2014-09-11 23:14:45 +08:00
|
|
|
}
|
2015-07-29 19:43:35 +08:00
|
|
|
|
|
|
|
void rtio_process_exceptional_status(int status, long long int timestamp, int channel)
|
|
|
|
{
|
|
|
|
if(status & RTIO_O_STATUS_FULL)
|
|
|
|
while(rtio_o_status_read() & RTIO_O_STATUS_FULL);
|
|
|
|
if(status & RTIO_O_STATUS_UNDERFLOW) {
|
|
|
|
rtio_o_underflow_reset_write(1);
|
|
|
|
exception_raise_params(EID_RTIO_UNDERFLOW,
|
|
|
|
timestamp, channel, rtio_get_counter());
|
|
|
|
}
|
|
|
|
if(status & RTIO_O_STATUS_SEQUENCE_ERROR) {
|
|
|
|
rtio_o_sequence_error_reset_write(1);
|
|
|
|
exception_raise_params(EID_RTIO_SEQUENCE_ERROR,
|
|
|
|
timestamp, channel, 0);
|
|
|
|
}
|
|
|
|
if(status & RTIO_O_STATUS_COLLISION_ERROR) {
|
|
|
|
rtio_o_collision_error_reset_write(1);
|
|
|
|
exception_raise_params(EID_RTIO_COLLISION_ERROR,
|
|
|
|
timestamp, channel, 0);
|
|
|
|
}
|
|
|
|
}
|