diff options
Diffstat (limited to 'src/mmio.c')
-rw-r--r-- | src/mmio.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/mmio.c b/src/mmio.c new file mode 100644 index 0000000..e545517 --- /dev/null +++ b/src/mmio.c | |||
@@ -0,0 +1,23 @@ | |||
1 | #include <mmio.h> | ||
2 | |||
3 | void* MMIO_BASE; | ||
4 | |||
5 | void mmio_init(int raspi) { | ||
6 | switch (raspi) { | ||
7 | case 2: | ||
8 | case 3: MMIO_BASE = (void*)0x3F000000; break; // raspi2 & 3 | ||
9 | case 4: MMIO_BASE = (void*)0xFE000000; break; // raspi4 | ||
10 | default: MMIO_BASE = (void*)0x20000000; break; // raspi1, raspi zero, etc. | ||
11 | } | ||
12 | } | ||
13 | |||
14 | #define REG_ADDR(reg) ((volatile uint32_t*)(MMIO_BASE + reg)) | ||
15 | |||
16 | uint32_t mmio_read(uint32_t reg) { | ||
17 | return *REG_ADDR(reg); | ||
18 | } | ||
19 | |||
20 | void mmio_write(uint32_t reg, uint32_t val) { | ||
21 | *REG_ADDR(reg) = val; | ||
22 | } | ||
23 | |||