aboutsummaryrefslogtreecommitdiff
path: root/ports/rp2/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'ports/rp2/main.c')
-rw-r--r--ports/rp2/main.c16
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;
}