/** * \brief Application entry point for TRNG example. * * Enable the TRNG, display the generated random value. * * \return Unused (ANSI-C compatibility). */ int main(void) { /* Initialize the SAM system */ sysclk_init(); board_init(); /* Configure console UART */ configure_console(); /* Output example information */ printf("-- TRNG Example --\n\r"); printf("-- %s\n\r", BOARD_NAME); printf("-- Compiled: %s %s --\n\r", __DATE__, __TIME__); /* Configure PMC */ pmc_enable_periph_clk(ID_TRNG); /* Enable TRNG */ trng_enable(TRNG); /* Enable TRNG interrupt */ NVIC_DisableIRQ(TRNG_IRQn); NVIC_ClearPendingIRQ(TRNG_IRQn); NVIC_SetPriority(TRNG_IRQn, 0); NVIC_EnableIRQ(TRNG_IRQn); trng_enable_interrupt(TRNG); /* User input loop */ while (1) { } }
/** * \brief Test TRNG setting. * * This test sets the TRNG to generate interrupt when new random value is completed. * * \param test Current test case. */ static void run_trng_test(const struct test_case *test) { /* Configure PMC */ pmc_enable_periph_clk(ID_TRNG); /* Enable TRNG */ trng_enable(TRNG); /* Enable TRNG interrupt */ NVIC_DisableIRQ(TRNG_IRQn); NVIC_ClearPendingIRQ(TRNG_IRQn); NVIC_SetPriority(TRNG_IRQn, 0); NVIC_EnableIRQ(TRNG_IRQn); trng_enable_interrupt(TRNG); while(trng_int_flag == 0); test_assert_true(test, trng_int_flag == 1, "No random value is generated"); }