diff options
Diffstat (limited to 'ports/rp2/main.c')
| -rw-r--r-- | ports/rp2/main.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/ports/rp2/main.c b/ports/rp2/main.c index 64218f97c..8fddeaa56 100644 --- a/ports/rp2/main.c +++ b/ports/rp2/main.c @@ -30,6 +30,7 @@ #include "py/runtime.h" #include "py/gc.h" #include "py/mperrno.h" +#include "py/mphal.h" #include "py/stackctrl.h" #include "lib/mp-readline/readline.h" #include "lib/utils/gchelper.h" @@ -168,10 +169,21 @@ void MP_WEAK __assert_func(const char *file, int line, const char *func, const c } #endif +#define POLY (0xD5) + +uint8_t rosc_random_u8(size_t cycles) { + static uint8_t r; + for (size_t i = 0; i < cycles; ++i) { + r = ((r << 1) | rosc_hw->randombit) ^ (r & 0x80 ? POLY : 0); + mp_hal_delay_us_fast(1); + } + return r; +} + uint32_t rosc_random_u32(void) { uint32_t value = 0; - for (size_t i = 0; i < 32; ++i) { - value = value << 1 | rosc_hw->randombit; + for (size_t i = 0; i < 4; ++i) { + value = value << 8 | rosc_random_u8(32); } return value; } |
