This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Random number generator hanging on TRNG_EV_VALRDY

Here is my function to generate random numbers of desired length.

#define TRNG_BASE 0x4000D000
#define TRNG_TASKS_START (*(volatile uint32_t *)(TRNG_BASE + 0x000))
#define TRNG_TASKS_STOP  (*(volatile uint32_t *)(TRNG_BASE + 0x004))
#define TRNG_EV_VALRDY   (*(volatile uint32_t *)(TRNG_BASE + 0x100))
#define TRNG_VALUE       (*(volatile uint32_t *)(TRNG_BASE + 0x508))

void sys_random(uint8_t *buf, int len)
{
    volatile uint8_t val;
    volatile int i = 0;
    /* Clear VALRDY */
    TRNG_EV_VALRDY = 0;
    /* Start TRNG */
    TRNG_TASKS_START = 1;
    for (i = 0; i < len; i++)
    {
        printf("Generating random #%d\r\n", i);
        
        /* Wait until value ready */
        while (TRNG_EV_VALRDY == 0);
    
        TRNG_EV_VALRDY = 0;
        buf[i] = (uint8_t)(TRNG_VALUE & 0x000000FF);
    }
    TRNG_TASKS_STOP |= 1;
}

After generating a few(5 to 6) random numbers the function hangs at 

while (TRNG_EV_VALRDY == 0)
.

I am using RIOT OS on nrf52832. What could be the issue here?

Parents
  • Hi

    It seems like a number is never generated, and I'm not able to see what the TRNG_VALUE is in this context, so I'm guessing whatever TRNG_VALUE is doing, it's never generating a number for you. Might I suggest checking out our RNG example in our SDK for inspiration?

    Due to the summer vacation period here in Norway, we are low on staff at the moment, so delayed replies are expected. Sorry about the inconvenience!

    Best regards,

    Simon

Reply
  • Hi

    It seems like a number is never generated, and I'm not able to see what the TRNG_VALUE is in this context, so I'm guessing whatever TRNG_VALUE is doing, it's never generating a number for you. Might I suggest checking out our RNG example in our SDK for inspiration?

    Due to the summer vacation period here in Norway, we are low on staff at the moment, so delayed replies are expected. Sorry about the inconvenience!

    Best regards,

    Simon

Children
Related