forked from M-Labs/artiq
soc/runtime: add RTIO support
This commit is contained in:
parent
1885a87187
commit
043c4345e5
|
@ -119,14 +119,24 @@ static int rpc(int rpc_num, int n_args, ...)
|
||||||
return receive_int();
|
return receive_int();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gpio_set(int channel, int level)
|
static void gpio_set(int channel, int value)
|
||||||
{
|
{
|
||||||
leds_out_write(!!level);
|
leds_out_write(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void rtio_set(int timestamp, int channel, int value)
|
||||||
|
{
|
||||||
|
rtio_chan_sel_write(channel);
|
||||||
|
rtio_o_timestamp_write(timestamp);
|
||||||
|
rtio_o_value_write(value);
|
||||||
|
while(!rtio_o_writable_read());
|
||||||
|
rtio_o_we_write(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct symbol syscalls[] = {
|
static const struct symbol syscalls[] = {
|
||||||
{"__syscall_rpc", rpc},
|
{"__syscall_rpc", rpc},
|
||||||
{"__syscall_gpio_set", gpio_set},
|
{"__syscall_gpio_set", gpio_set},
|
||||||
|
{"__syscall_rtio_set", rtio_set},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -144,13 +154,15 @@ int main(void)
|
||||||
uart_init();
|
uart_init();
|
||||||
|
|
||||||
puts("ARTIQ runtime built "__DATE__" "__TIME__"\n");
|
puts("ARTIQ runtime built "__DATE__" "__TIME__"\n");
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
length = ident_and_download_kernel(kbuf, sizeof(kbuf));
|
length = ident_and_download_kernel(kbuf, sizeof(kbuf));
|
||||||
if(length > 0) {
|
if(length > 0) {
|
||||||
if(load_elf(syscalls, kbuf, length, kcode, sizeof(kcode))) {
|
if(load_elf(syscalls, kbuf, length, kcode, sizeof(kcode))) {
|
||||||
flush_cpu_icache();
|
flush_cpu_icache();
|
||||||
|
rtio_reset_write(0);
|
||||||
k();
|
k();
|
||||||
|
rtio_reset_write(1);
|
||||||
send_sync();
|
send_sync();
|
||||||
send_char(MSGTYPE_KERNEL_FINISHED);
|
send_char(MSGTYPE_KERNEL_FINISHED);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue