From d1a349de16cc99ced23c482a05c8142e2b25ba66 Mon Sep 17 00:00:00 2001 From: Pavel Pisa Date: Sun, 21 Dec 2014 18:17:32 +0100 Subject: [PATCH] RoCoN: test of FPGA internal interference between TUMBL and LPC. Signed-off-by: Pavel Pisa --- sw/app/rocon/appl_tests.c | 89 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/sw/app/rocon/appl_tests.c b/sw/app/rocon/appl_tests.c index 13d2b89..a46987b 100644 --- a/sw/app/rocon/appl_tests.c +++ b/sw/app/rocon/appl_tests.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -442,6 +443,87 @@ int cmd_do_testtumblefw(cmd_io_t *cmd_io, const struct cmd_des *des, char *param return 0; } +#define CK_IRC_WORDS 16 +#define CK_TX_WORDS 16 +#define CK_RX_WORDS 16 + +#define CK_IRC_START ((uint32_t*)fpga_irc[0]) +#define CK_TX_START (fpga_lx_master_transmitter_base+9) +#define CK_RX_START (fpga_lx_master_receiver_base+44) + +typedef struct ck_state_t { + uint32_t ck_irc_base[CK_IRC_WORDS]; + uint32_t ck_irc_read[CK_IRC_WORDS]; + uint32_t ck_tx_base[CK_TX_WORDS]; + uint32_t ck_tx_read[CK_TX_WORDS]; + uint32_t ck_rx_base[CK_RX_WORDS]; + uint32_t ck_rx_read[CK_RX_WORDS]; + + uint32_t ck_irc_err; + uint32_t ck_tx_err; + uint32_t ck_rx_err; +} ck_state_t; + +int cmd_do_testtumblebus(cmd_io_t *cmd_io, const struct cmd_des *des, char *param[]) +{ + int i; + int cycles = 10000; + static ck_state_t *ckst = NULL; + if (ckst == NULL) + ckst = malloc(sizeof(*ckst)); + if (ckst == NULL) + return 1; + + ckst->ck_irc_err = 0; + ckst->ck_tx_err = 0; + ckst->ck_rx_err = 0; + + for (i = 0; i < CK_IRC_WORDS; i++) + ckst->ck_irc_base[i] = CK_IRC_START[i]; + + for (i = 0; i < CK_TX_WORDS; i++) + ckst->ck_tx_base[i] = CK_TX_START[i]; + + for (i = 0; i < CK_RX_WORDS; i++) + ckst->ck_rx_base[i] = CK_RX_START[i]; + + while (cycles--) { + if (!ckst->ck_irc_err) { + for (i = 0; i < CK_IRC_WORDS; i++) + ckst->ck_irc_read[i] = CK_IRC_START[i]; + for (i = 0; i < CK_IRC_WORDS; i++) + if (ckst->ck_irc_read[i] != ckst->ck_irc_base[i]) { + ckst->ck_irc_err++; + printf("irc+%x %08"PRIx32" != %08"PRIx32"\n", + i, ckst->ck_irc_read[i], ckst->ck_irc_base[i]); + } + } + + if (!ckst->ck_tx_err) { + for (i = 0; i < CK_TX_WORDS; i++) + ckst->ck_tx_read[i] = CK_TX_START[i]; + for (i = 0; i < CK_TX_WORDS; i++) + if (ckst->ck_tx_read[i] != ckst->ck_tx_base[i]) { + ckst->ck_tx_err++; + printf("tx+%x %08"PRIx32" != %08"PRIx32"\n", + i, ckst->ck_tx_read[i], ckst->ck_tx_base[i]); + } + } + + if (!ckst->ck_rx_err) { + for (i = 0; i < CK_RX_WORDS; i++) + ckst->ck_rx_read[i] = CK_RX_START[i]; + for (i = 0; i < CK_RX_WORDS; i++) + if (ckst->ck_rx_read[i] != ckst->ck_rx_base[i]) { + ckst->ck_rx_err++; + printf("rx+%x %08"PRIx32" != %08"PRIx32"\n", + i, ckst->ck_rx_read[i], ckst->ck_rx_base[i]); + } + } + } + + return 0; +} cmd_des_t const cmd_des_test_memusage = {0, 0, "memusage", "report memory usage", cmd_do_test_memusage, @@ -520,6 +602,12 @@ cmd_des_t const cmd_des_testtumblefw = {0, 0, cmd_do_testtumblefw, {(void *)0} }; +cmd_des_t const cmd_des_testtumblebus = {0, 0, + "testtumblebus", "test Tumble coprocesor bus", + cmd_do_testtumblebus, {(void *)0} + }; + + cmd_des_t const *const cmd_appl_tests[] = { &cmd_des_test_memusage, @@ -538,5 +626,6 @@ cmd_des_t const *const cmd_appl_tests[] = &cmd_des_testlxpwrstat, &cmd_des_testfncapprox, &cmd_des_testtumblefw, + &cmd_des_testtumblebus, NULL }; -- 2.39.2