From b5f7b6b8ed23eccc15415776b6d2fa05e10b9c7d Mon Sep 17 00:00:00 2001 From: Fredrik Thulin Date: Thu, 10 Sep 2015 10:47:08 +0200 Subject: Implement UART outputing of results --- src/fmc-test/src/main.c | 87 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 66 insertions(+), 21 deletions(-) (limited to 'src/fmc-test/src/main.c') 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 //------------------------------------------------------------------------------ -- cgit v1.2.3