diff options
Diffstat (limited to 'src/fmc-test/src/main.c')
-rw-r--r-- | src/fmc-test/src/main.c | 220 |
1 files changed, 110 insertions, 110 deletions
diff --git a/src/fmc-test/src/main.c b/src/fmc-test/src/main.c index ce04bee..38165b8 100644 --- a/src/fmc-test/src/main.c +++ b/src/fmc-test/src/main.c @@ -61,67 +61,67 @@ int main(void) //------------------------------------------------------------------------------ { int i; - // initialize hal + // initialize hal HAL_Init(); - // configure system clock + // configure system clock SystemClock_Config(); - // initialize gpio - MX_GPIO_Init(); + // initialize gpio + MX_GPIO_Init(); - // 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++) { - HAL_Delay(500); - led_toggle(GPIO_PIN_LED_BLUE); - } + // 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++) { + HAL_Delay(500); + led_toggle(GPIO_PIN_LED_BLUE); + } - // initialize rng - MX_RNG_Init(); + // initialize rng + MX_RNG_Init(); - // prepare fmc interface - fmc_init(); + // prepare fmc interface + fmc_init(); - // turn on green led, turn off other leds - led_on(GPIO_PIN_LED_GREEN); - led_off(GPIO_PIN_LED_YELLOW); - led_off(GPIO_PIN_LED_RED); - led_off(GPIO_PIN_LED_BLUE); + // turn on green led, turn off other leds + led_on(GPIO_PIN_LED_GREEN); + led_off(GPIO_PIN_LED_YELLOW); + led_off(GPIO_PIN_LED_RED); + led_off(GPIO_PIN_LED_BLUE); - // vars - volatile int data_test_ok = 0, addr_test_ok = 0, successful_runs = 0; + // vars + volatile int data_test_ok = 0, addr_test_ok = 0, successful_runs = 0; - // main loop (test, until an error is detected) + // main loop (test, until an error is detected) while (1) - { - // test data bus - data_test_ok = test_fpga_data_bus(); - // test address bus - addr_test_ok = test_fpga_address_bus(); + { + // test data bus + data_test_ok = test_fpga_data_bus(); + // 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 (data_test_ok < TEST_NUM_ROUNDS) break; - // check for errors (abort testing in case of error) - if (addr_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); - } + // toggle yellow led to indicate, that we are alive + led_toggle(GPIO_PIN_LED_YELLOW); + successful_runs++; + } - // should never reach this line + // 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); + } + + // should never reach this line } @@ -129,37 +129,37 @@ int main(void) int test_fpga_data_bus(void) //------------------------------------------------------------------------------ { - int c, ok; - uint32_t rnd, buf; - HAL_StatusTypeDef hal_result; + int c, ok; + uint32_t rnd, buf; + HAL_StatusTypeDef hal_result; - // run some rounds of data bus test - for (c=0; c<TEST_NUM_ROUNDS; c++) + // run some rounds of data bus test + for (c=0; c<TEST_NUM_ROUNDS; c++) + { + data_diff = 0; + // try to generate "random" number + hal_result = HAL_RNG_GenerateRandomNumber(&rng_inst, &rnd); + if (hal_result != HAL_OK) break; + + // write value to fpga at address 0 + ok = fmc_write_32(0, &rnd); + if (ok != 0) break; + + // read value from fpga + ok = fmc_read_32(0, &buf); + if (ok != 0) break; + + // compare (abort testing in case of error) + if (buf != rnd) { - data_diff = 0; - // try to generate "random" number - hal_result = HAL_RNG_GenerateRandomNumber(&rng_inst, &rnd); - if (hal_result != HAL_OK) break; - - // write value to fpga at address 0 - ok = fmc_write_32(0, &rnd); - if (ok != 0) break; - - // read value from fpga - ok = fmc_read_32(0, &buf); - if (ok != 0) break; - - // compare (abort testing in case of error) - if (buf != rnd) - { - data_diff = buf; - data_diff ^= rnd; - break; - } + data_diff = buf; + data_diff ^= rnd; + break; } + } - // return number of successful tests - return c; + // return number of successful tests + return c; } @@ -167,44 +167,44 @@ int test_fpga_data_bus(void) int test_fpga_address_bus(void) //------------------------------------------------------------------------------ { - int c, ok; + int c, ok; uint32_t rnd, buf; HAL_StatusTypeDef hal_result; - // run some rounds of address bus test + // run some rounds of address bus test for (c=0; c<TEST_NUM_ROUNDS; c++) - { - addr_diff = 0; - // try to generate "random" number - hal_result = HAL_RNG_GenerateRandomNumber(&rng_inst, &rnd); - if (hal_result != HAL_OK) break; - - // we only have 2^22 32-bit words - rnd &= 0x00FFFFFC; - - // don't test zero addresses (fpga will store data, not address) - if (rnd == 0) continue; - - // write dummy value to fpga at some non-zero address - ok = fmc_write_32(rnd, &buf); - if (ok != 0) break; - - // read value from fpga - ok = fmc_read_32(0, &buf); - if (ok != 0) break; - - // fpga receives address of 32-bit word, while we need - // byte address here to compare - buf <<= 2; - - // compare (abort testing in case of error) - if (buf != rnd) - { - addr_diff = buf; - addr_diff ^= rnd; - break; - } - } + { + addr_diff = 0; + // try to generate "random" number + hal_result = HAL_RNG_GenerateRandomNumber(&rng_inst, &rnd); + if (hal_result != HAL_OK) break; + + // we only have 2^22 32-bit words + rnd &= 0x00FFFFFC; + + // don't test zero addresses (fpga will store data, not address) + if (rnd == 0) continue; + + // write dummy value to fpga at some non-zero address + ok = fmc_write_32(rnd, &buf); + if (ok != 0) break; + + // read value from fpga + ok = fmc_read_32(0, &buf); + if (ok != 0) break; + + // fpga receives address of 32-bit word, while we need + // byte address here to compare + buf <<= 2; + + // compare (abort testing in case of error) + if (buf != rnd) + { + addr_diff = buf; + addr_diff ^= rnd; + break; + } + } return c; } @@ -236,7 +236,7 @@ void SystemClock_Config(void) HAL_PWREx_ActivateOverDrive(); RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1 - |RCC_CLOCKTYPE_PCLK2; + |RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; @@ -263,14 +263,14 @@ void MX_RNG_Init(void) void MX_GPIO_Init(void) //------------------------------------------------------------------------------ { - GPIO_InitTypeDef GPIO_InitStruct; + GPIO_InitTypeDef GPIO_InitStruct; __GPIOJ_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_LOW; + GPIO_InitStruct.Speed = GPIO_SPEED_LOW; HAL_GPIO_Init(GPIOJ, &GPIO_InitStruct); } |