forked from M-Labs/artiq
runtime/test_mode: support setting O and OE separately
This commit is contained in:
parent
a61d701d47
commit
8fe5c7ac01
@ -20,12 +20,20 @@ void bridge_main(void)
|
||||
while(1) {
|
||||
umsg = mailbox_wait_and_receive();
|
||||
switch(umsg->type) {
|
||||
case MESSAGE_TYPE_BRG_TTL_OUT: {
|
||||
case MESSAGE_TYPE_BRG_TTL_OE: {
|
||||
struct msg_brg_ttl_out *msg;
|
||||
|
||||
msg = (struct msg_brg_ttl_out *)umsg;
|
||||
rtio_init();
|
||||
rtio_set_oe(rtio_get_counter() + 8000, msg->channel, msg->value);
|
||||
mailbox_acknowledge();
|
||||
break;
|
||||
}
|
||||
case MESSAGE_TYPE_BRG_TTL_O: {
|
||||
struct msg_brg_ttl_out *msg;
|
||||
|
||||
msg = (struct msg_brg_ttl_out *)umsg;
|
||||
rtio_init();
|
||||
rtio_set_oe(rtio_get_counter() + 8000, msg->channel, 1);
|
||||
rtio_set_o(rtio_get_counter() + 8000, msg->channel, msg->value);
|
||||
mailbox_acknowledge();
|
||||
break;
|
||||
|
@ -14,7 +14,8 @@ enum {
|
||||
MESSAGE_TYPE_LOG,
|
||||
|
||||
MESSAGE_TYPE_BRG_READY,
|
||||
MESSAGE_TYPE_BRG_TTL_OUT,
|
||||
MESSAGE_TYPE_BRG_TTL_O,
|
||||
MESSAGE_TYPE_BRG_TTL_OE,
|
||||
MESSAGE_TYPE_BRG_DDS_SEL,
|
||||
MESSAGE_TYPE_BRG_DDS_RESET,
|
||||
MESSAGE_TYPE_BRG_DDS_READ_REQUEST,
|
||||
@ -71,6 +72,7 @@ struct msg_log {
|
||||
/* bridge messages */
|
||||
|
||||
struct msg_brg_ttl_out {
|
||||
/* used for OE and O */
|
||||
int type;
|
||||
int channel;
|
||||
int value;
|
||||
|
@ -35,11 +35,21 @@ static void amp_bridge_init(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void p_ttlout(int n, int value)
|
||||
static void p_ttloe(int n, int value)
|
||||
{
|
||||
struct msg_brg_ttl_out msg;
|
||||
|
||||
msg.type = MESSAGE_TYPE_BRG_TTL_OUT;
|
||||
msg.type = MESSAGE_TYPE_BRG_TTL_OE;
|
||||
msg.channel = n;
|
||||
msg.value = value;
|
||||
mailbox_send_and_wait(&msg);
|
||||
}
|
||||
|
||||
static void p_ttlo(int n, int value)
|
||||
{
|
||||
struct msg_brg_ttl_out msg;
|
||||
|
||||
msg.type = MESSAGE_TYPE_BRG_TTL_O;
|
||||
msg.channel = n;
|
||||
msg.value = value;
|
||||
mailbox_send_and_wait(&msg);
|
||||
@ -142,13 +152,13 @@ static void clksrc(char *value)
|
||||
rtiocrg_clock_sel_write(value2);
|
||||
}
|
||||
|
||||
static void ttlout(char *n, char *value)
|
||||
static void ttloe(char *n, char *value)
|
||||
{
|
||||
char *c;
|
||||
unsigned int n2, value2;
|
||||
|
||||
if((*n == 0)||(*value == 0)) {
|
||||
printf("ttlout <n> <value>\n");
|
||||
printf("ttloe <n> <value>\n");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -163,7 +173,31 @@ static void ttlout(char *n, char *value)
|
||||
return;
|
||||
}
|
||||
|
||||
p_ttlout(n2, value2);
|
||||
p_ttloe(n2, value2);
|
||||
}
|
||||
|
||||
static void ttlo(char *n, char *value)
|
||||
{
|
||||
char *c;
|
||||
unsigned int n2, value2;
|
||||
|
||||
if((*n == 0)||(*value == 0)) {
|
||||
printf("ttlo <n> <value>\n");
|
||||
return;
|
||||
}
|
||||
|
||||
n2 = strtoul(n, &c, 0);
|
||||
if(*c != 0) {
|
||||
printf("incorrect channel\n");
|
||||
return;
|
||||
}
|
||||
value2 = strtoul(value, &c, 0);
|
||||
if(*c != 0) {
|
||||
printf("incorrect value\n");
|
||||
return;
|
||||
}
|
||||
|
||||
p_ttlo(n2, value2);
|
||||
}
|
||||
|
||||
static void ddssel(char *n)
|
||||
@ -341,7 +375,8 @@ static void help(void)
|
||||
puts("Available commands:");
|
||||
puts("help - this message");
|
||||
puts("clksrc <n> - select RTIO clock source");
|
||||
puts("ttlout <n> <v> - output TTL");
|
||||
puts("ttloe <n> <v> - set TTL output enable");
|
||||
puts("ttlo <n> <v> - set TTL output value");
|
||||
puts("ddssel <n> - select a DDS");
|
||||
puts("ddsinit - reset, config, FUD DDS");
|
||||
puts("ddsreset - reset DDS");
|
||||
@ -418,7 +453,8 @@ static void do_command(char *c)
|
||||
|
||||
else if(strcmp(token, "clksrc") == 0) clksrc(get_token(&c));
|
||||
|
||||
else if(strcmp(token, "ttlout") == 0) ttlout(get_token(&c), get_token(&c));
|
||||
else if(strcmp(token, "ttloe") == 0) ttloe(get_token(&c), get_token(&c));
|
||||
else if(strcmp(token, "ttlo") == 0) ttlo(get_token(&c), get_token(&c));
|
||||
|
||||
else if(strcmp(token, "ddssel") == 0) ddssel(get_token(&c));
|
||||
else if(strcmp(token, "ddsw") == 0) ddsw(get_token(&c), get_token(&c));
|
||||
|
Loading…
Reference in New Issue
Block a user