diff options
author | Paul Selkirk <paul@psgd.org> | 2016-04-11 14:44:44 -0400 |
---|---|---|
committer | Paul Selkirk <paul@psgd.org> | 2016-04-11 14:44:44 -0400 |
commit | 79b1ba7104dba52dbfacf11a07305702889f440b (patch) | |
tree | 75a08fdc6e3af427e953f319b3fdb0f9dcfdf80e /self-test/fmc-perf.c | |
parent | d5669dac8c7ab2fbf6bd3c7faed7ce050c94ee1a (diff) |
Reorganize Makefile and directory structure, because it's messy, and it's about to get messier.
Diffstat (limited to 'self-test/fmc-perf.c')
-rw-r--r-- | self-test/fmc-perf.c | 126 |
1 files changed, 0 insertions, 126 deletions
diff --git a/self-test/fmc-perf.c b/self-test/fmc-perf.c deleted file mode 100644 index 0c753a7..0000000 --- a/self-test/fmc-perf.c +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Test read/write performance of the fmc bus - */ -#include "stm32f4xx_hal.h" -#include "stm-init.h" -#include "stm-led.h" -#include "stm-fmc.h" -#include "stm-uart.h" - -#define TEST_NUM_ROUNDS 2000000 - -RNG_HandleTypeDef rng_inst; - -static void MX_RNG_Init(void) -{ - rng_inst.Instance = RNG; - HAL_RNG_Init(&rng_inst); -} - -static uint32_t random(void) -{ - uint32_t rnd; - if (HAL_RNG_GenerateRandomNumber(&rng_inst, &rnd) != HAL_OK) { - uart_send_string("HAL_RNG_GenerateRandomNumber failed\r\n"); - Error_Handler(); - } - return rnd; -} - -static void sanity(void) -{ - uint32_t rnd, data; - - rnd = random(); - if (fmc_write_32(0, &rnd) != 0) { - uart_send_string("fmc_write_32 failed\r\n"); - Error_Handler(); - } - if (fmc_read_32(0, &data) != 0) { - uart_send_string("fmc_read_32 failed\r\n"); - Error_Handler(); - } - if (data != rnd) { - uart_send_string("Data bus fail: expected "); - uart_send_hex(rnd, 8); - uart_send_string(", got "); - uart_send_hex(data, 8); - uart_send_string(", diff "); - uart_send_hex(data ^ rnd, 8); - uart_send_string("\r\n"); - Error_Handler(); - } -} - -static void _time_check(char *label, const uint32_t t0) -{ - uint32_t t = HAL_GetTick() - t0; - - uart_send_string(label); - uart_send_integer(t / 1000, 0); - uart_send_char('.'); - uart_send_integer(t % 1000, 3); - uart_send_string(" seconds, "); - uart_send_integer(((1000 * TEST_NUM_ROUNDS) / t), 0); - uart_send_string("/sec\r\n"); -} - -#define time_check(_label_, _expr_) \ - do { \ - uint32_t _t = HAL_GetTick(); \ - (_expr_); \ - _time_check(_label_, _t); \ - } while (0) - -static void test_read(void) -{ - uint32_t i, data; - - for (i = 0; i < TEST_NUM_ROUNDS; ++i) { - if (fmc_read_32(0, &data) != 0) { - uart_send_string("fmc_read_32 failed\r\n"); - Error_Handler(); - } - } -} - -static void test_write(void) -{ - uint32_t i; - - for (i = 0; i < TEST_NUM_ROUNDS; ++i) { - if (fmc_write_32(0, &i) != 0) { - uart_send_string("fmc_write_32 failed\r\n"); - Error_Handler(); - } - } -} - -int main(void) -{ - stm_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(LED_BLUE); - for (int i = 0; i < 12; i++) { - HAL_Delay(500); - led_toggle(LED_BLUE); - } - led_off(LED_BLUE); - - // initialize rng - MX_RNG_Init(); - - // prepare fmc interface - fmc_init(); - - sanity(); - - time_check("read ", test_read()); - time_check("write ", test_write()); - - uart_send_string("Done.\r\n\r\n"); - return 0; -} |