mirror of
https://github.com/dustinbrun/ATtiny_Garden-Lamp
synced 2025-12-30 06:03:22 +01:00
Version 1
This commit is contained in:
33
code/random_avr.c
Normal file
33
code/random_avr.c
Normal file
@@ -0,0 +1,33 @@
|
||||
/**
|
||||
Copyright (c) 2017, Łukasz Marcin Podkalicki <lpodkalicki@gmail.com>
|
||||
Lightweight library of 16 bit random number generator based on LFSR.
|
||||
*/
|
||||
|
||||
#include <avr/eeprom.h>
|
||||
#include "random_avr.h"
|
||||
|
||||
static uint16_t random_number = 0;
|
||||
|
||||
static uint16_t
|
||||
lfsr16_next(uint16_t n)
|
||||
{
|
||||
|
||||
return (n >> 0x01U) ^ (-(n & 0x01U) & 0xB400U);
|
||||
}
|
||||
|
||||
void random_init(uint16_t seed)
|
||||
{
|
||||
#ifdef USE_RANDOM_SEED
|
||||
random_number = lfsr16_next(eeprom_read_word((uint16_t *)RANDOM_SEED_ADDRESS) ^ seed);
|
||||
eeprom_write_word((uint16_t *)0, random_number);
|
||||
#else
|
||||
random_number = seed;
|
||||
#endif /* !USE_RANDOM_SEED */
|
||||
}
|
||||
|
||||
uint16_t
|
||||
random_avr(void)
|
||||
{
|
||||
|
||||
return (random_number = lfsr16_next(random_number));
|
||||
}
|
||||
Reference in New Issue
Block a user