Example #1
0
bool rng_word(portTickType timeout, uint32_t *result) {
    // try to receive some data right away
    if(pdTRUE != xQueueReceive(rng_buffer, result, (portTickType)0)) {
        RNG_ITConfig(ENABLE);

        return pdTRUE == xQueueReceive(rng_buffer, result, timeout);
    }

    return true;
}
Example #2
0
void rng_irq_handler(void) {
    portBASE_TYPE shouldYield = pdFALSE;
    uint32_t word = 0;

    if(RNG_GetFlagStatus(RNG_FLAG_DRDY) == SET) {
        word = RNG_GetRandomNumber();
        if(pdTRUE != xQueueSendFromISR(rng_buffer, &word, &shouldYield)) {
                RNG_ITConfig(DISABLE);
        }
    }

    if(pdTRUE == shouldYield) {
        taskYIELD();
    }
}
Example #3
0
void InitializeRandom(void) {
	RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE);
	RNG_Cmd(ENABLE);
	RNG_ITConfig(DISABLE);
	RNGInitialized = 1;
}