summaryrefslogtreecommitdiff
path: root/src/fmc-test/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fmc-test/src/main.c')
-rw-r--r--src/fmc-test/src/main.c87
1 files changed, 66 insertions, 21 deletions
diff --git a/src/fmc-test/src/main.c b/src/fmc-test/src/main.c
index 38165b8..7275aac 100644
--- a/src/fmc-test/src/main.c
+++ b/src/fmc-test/src/main.c
@@ -8,7 +8,7 @@
//------------------------------------------------------------------------------
#include "stm32f4xx_hal.h"
#include "stm-fmc.h"
-
+#include "stm-uart.h"
//------------------------------------------------------------------------------
// Defines
@@ -70,6 +70,11 @@ int main(void)
// initialize gpio
MX_GPIO_Init();
+ // initialize UART for debug output
+ MX_USART2_UART_Init();
+
+ uart_send_string("Keep calm for Novena boot...\r\n");
+
// Blink blue LED for six seconds to not upset the Novena at boot.
led_on(GPIO_PIN_LED_BLUE);
for (i = 0; i < 12; i++) {
@@ -90,7 +95,7 @@ int main(void)
led_off(GPIO_PIN_LED_BLUE);
// vars
- volatile int data_test_ok = 0, addr_test_ok = 0, successful_runs = 0;
+ volatile int data_test_ok = 0, addr_test_ok = 0, successful_runs = 0, failed_runs = 0, sleep = 0;
// main loop (test, until an error is detected)
while (1)
@@ -100,25 +105,32 @@ int main(void)
// test address bus
addr_test_ok = test_fpga_address_bus();
- // check for errors (abort testing in case of error)
- if (data_test_ok < TEST_NUM_ROUNDS) break;
-
- // check for errors (abort testing in case of error)
- if (addr_test_ok < TEST_NUM_ROUNDS) break;
-
- // toggle yellow led to indicate, that we are alive
- led_toggle(GPIO_PIN_LED_YELLOW);
- successful_runs++;
- }
-
- // error handler
- while (1)
- {
- // turn on red led, turn off other leds
- led_on(GPIO_PIN_LED_RED);
- led_off(GPIO_PIN_LED_GREEN);
- led_off(GPIO_PIN_LED_YELLOW);
- led_off(GPIO_PIN_LED_BLUE);
+ uart_send_string("Data: ");
+ uart_send_integer(data_test_ok, 100000);
+ uart_send_string(", addr: ");
+ uart_send_integer(addr_test_ok, 100000);
+ uart_send_string("\r\n");
+
+ if (data_test_ok == TEST_NUM_ROUNDS &&
+ addr_test_ok == TEST_NUM_ROUNDS) {
+ // toggle yellow led to indicate, that we are alive
+ led_toggle(GPIO_PIN_LED_YELLOW);
+
+ successful_runs++;
+ sleep = 100;
+ } else {
+ led_on(GPIO_PIN_LED_RED);
+ failed_runs++;
+ sleep = 2000;
+ }
+
+ uart_send_string("Success ");
+ uart_send_integer(successful_runs, 0);
+ uart_send_string(", fail ");
+ uart_send_integer(failed_runs, 0);
+ uart_send_string("\r\n\r\n");
+
+ HAL_Delay(sleep);
}
// should never reach this line
@@ -154,6 +166,15 @@ int test_fpga_data_bus(void)
{
data_diff = buf;
data_diff ^= rnd;
+
+ uart_send_string("Data bus fail: expected ");
+ uart_send_binary(rnd, 32);
+ uart_send_string(", got ");
+ uart_send_binary(buf, 32);
+ uart_send_string(", diff ");
+ uart_send_binary(data_diff, 32);
+ uart_send_string("\r\n");
+
break;
}
}
@@ -202,6 +223,15 @@ int test_fpga_address_bus(void)
{
addr_diff = buf;
addr_diff ^= rnd;
+
+ uart_send_string("Addr bus fail: expected ");
+ uart_send_binary(rnd, 32);
+ uart_send_string(", got ");
+ uart_send_binary(buf, 32);
+ uart_send_string(", diff ");
+ uart_send_binary(addr_diff, 32);
+ uart_send_string("\r\n");
+
break;
}
}
@@ -275,6 +305,21 @@ void MX_GPIO_Init(void)
}
+
+/**
+ * @brief This function is executed in case of error occurrence.
+ * @param None
+ * @retval None
+ */
+void Error_Handler(void)
+{
+ volatile int i = 0;
+ led_on(GPIO_PIN_LED_RED);
+ while (1) {
+ i++; /* To not get optimized away/obscured */
+ }
+}
+
//------------------------------------------------------------------------------
#ifdef USE_FULL_ASSERT
//------------------------------------------------------------------------------