API Reference
The NEORV32 RISC-V Processor
Loading...
Searching...
No Matches
neorv32_sysinfo.h
Go to the documentation of this file.
1// ================================================================================ //
2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
3// Copyright (c) NEORV32 contributors. //
4// Copyright (c) Stephan Nolting. All rights reserved. //
5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
6// SPDX-License-Identifier: BSD-3-Clause //
7// ================================================================================ //
8
13
14#ifndef NEORV32_SYSINFO_H
15#define NEORV32_SYSINFO_H
16
17#include <neorv32.h>
18#include <stdint.h>
19
20/**********************************************************************/
25typedef volatile struct __attribute__((packed,aligned(4))) {
26 uint32_t CLK;
27 const uint32_t MISC;
28 const uint32_t SOC;
29 const uint32_t CACHE;
31
33#define NEORV32_SYSINFO ((neorv32_sysinfo_t*) (NEORV32_SYSINFO_BASE))
34
50
86
99
100
101/**********************************************************************/
105static inline uint32_t __attribute__ ((always_inline)) neorv32_sysinfo_is_sim(void) {
106 return (uint32_t)(NEORV32_SYSINFO->SOC >> SYSINFO_SOC_SIM);
107}
108
109/**********************************************************************/
113static inline uint32_t __attribute__ ((always_inline)) neorv32_sysinfo_get_numcores(void) {
114 return (uint32_t)((NEORV32_SYSINFO->MISC >> SYSINFO_MISC_HART_LSB) & 0x0fU);
115}
116
117/**********************************************************************/
121static inline uint32_t __attribute__ ((always_inline)) neorv32_sysinfo_get_imemsize(void) {
122 uint32_t tmp = (NEORV32_SYSINFO->MISC >> SYSINFO_MISC_IMEM_LSB) & 0xffU;
123 if (tmp) {
124 return (uint32_t)(1u << tmp);
125 }
126 return 0;
127}
128
129/**********************************************************************/
133static inline uint32_t __attribute__ ((always_inline)) neorv32_sysinfo_get_dmemsize(void) {
134 uint32_t tmp = (NEORV32_SYSINFO->MISC >> SYSINFO_MISC_DMEM_LSB) & 0xffU;
135 if (tmp) {
136 return (uint32_t)(1U << tmp);
137 }
138 return 0;
139}
140
141/**********************************************************************/
145static inline uint32_t __attribute__ ((always_inline)) neorv32_sysinfo_get_bootmode(void) {
146 return (uint32_t)((NEORV32_SYSINFO->MISC >> SYSINFO_MISC_BOOT_LSB) & 0x03U);
147}
148
149/**********************************************************************/
153static inline uint32_t __attribute__ ((always_inline)) neorv32_sysinfo_get_intbustimeout(void) {
154 uint32_t tmp = (NEORV32_SYSINFO->MISC >> SYSINFO_MISC_ITMO_LSB) & 0x1fU;
155 if (tmp) {
156 return (uint32_t)(1U << tmp);
157 }
158 return 0;
159}
160
161/**********************************************************************/
165static inline uint32_t __attribute__ ((always_inline)) neorv32_sysinfo_get_extbustimeout(void) {
166 uint32_t tmp = (NEORV32_SYSINFO->MISC >> SYSINFO_MISC_ETMO_LSB) & 0x1fU;
167 if (tmp) {
168 return (uint32_t)(1U << tmp);
169 }
170 return 0;
171}
172
173/**********************************************************************/
177static inline uint32_t __attribute__ ((always_inline)) neorv32_sysinfo_get_clk(void) {
178 return NEORV32_SYSINFO->CLK;
179}
180
181/**********************************************************************/
185static inline void __attribute__ ((always_inline)) neorv32_sysinfo_set_clk(uint32_t clock) {
186 NEORV32_SYSINFO->CLK = clock;
187}
188
189#endif // NEORV32_SYSINFO_H
Main NEORV32 core library / driver / HAL include file.
static uint32_t neorv32_sysinfo_get_extbustimeout(void)
Definition neorv32_sysinfo.h:165
#define NEORV32_SYSINFO
Definition neorv32_sysinfo.h:33
static uint32_t neorv32_sysinfo_get_numcores(void)
Definition neorv32_sysinfo.h:113
static uint32_t neorv32_sysinfo_get_dmemsize(void)
Definition neorv32_sysinfo.h:133
static uint32_t neorv32_sysinfo_get_imemsize(void)
Definition neorv32_sysinfo.h:121
NEORV32_SYSINFO_CACHE_enum
Definition neorv32_sysinfo.h:88
@ SYSINFO_CACHE_BLOCK_SIZE_3
Definition neorv32_sysinfo.h:90
@ SYSINFO_CACHE_I_NUM_BLOCKS_3
Definition neorv32_sysinfo.h:92
@ SYSINFO_CACHE_UC_BEGIN_3
Definition neorv32_sysinfo.h:96
@ SYSINFO_CACHE_I_NUM_BLOCKS_0
Definition neorv32_sysinfo.h:91
@ SYSINFO_CACHE_D_NUM_BLOCKS_3
Definition neorv32_sysinfo.h:94
@ SYSINFO_CACHE_UC_BEGIN_0
Definition neorv32_sysinfo.h:95
@ SYSINFO_CACHE_BURSTS_EN
Definition neorv32_sysinfo.h:97
@ SYSINFO_CACHE_BLOCK_SIZE_0
Definition neorv32_sysinfo.h:89
@ SYSINFO_CACHE_D_NUM_BLOCKS_0
Definition neorv32_sysinfo.h:93
static void neorv32_sysinfo_set_clk(uint32_t clock)
Definition neorv32_sysinfo.h:185
NEORV32_SYSINFO_MISC_enum
Definition neorv32_sysinfo.h:36
@ SYSINFO_MISC_ITMO_MSB
Definition neorv32_sysinfo.h:46
@ SYSINFO_MISC_DMEM_LSB
Definition neorv32_sysinfo.h:39
@ SYSINFO_MISC_ITMO_LSB
Definition neorv32_sysinfo.h:45
@ SYSINFO_MISC_ETMO_MSB
Definition neorv32_sysinfo.h:48
@ SYSINFO_MISC_IMEM_LSB
Definition neorv32_sysinfo.h:37
@ SYSINFO_MISC_IMEM_MSB
Definition neorv32_sysinfo.h:38
@ SYSINFO_MISC_BOOT_MSB
Definition neorv32_sysinfo.h:44
@ SYSINFO_MISC_DMEM_MSB
Definition neorv32_sysinfo.h:40
@ SYSINFO_MISC_HART_MSB
Definition neorv32_sysinfo.h:42
@ SYSINFO_MISC_BOOT_LSB
Definition neorv32_sysinfo.h:43
@ SYSINFO_MISC_HART_LSB
Definition neorv32_sysinfo.h:41
@ SYSINFO_MISC_ETMO_LSB
Definition neorv32_sysinfo.h:47
static uint32_t neorv32_sysinfo_is_sim(void)
Definition neorv32_sysinfo.h:105
static uint32_t neorv32_sysinfo_get_intbustimeout(void)
Definition neorv32_sysinfo.h:153
NEORV32_SYSINFO_SOC_enum
Definition neorv32_sysinfo.h:52
@ SYSINFO_SOC_ICACHE
Definition neorv32_sysinfo.h:58
@ SYSINFO_SOC_OCD_AUTH
Definition neorv32_sysinfo.h:64
@ SYSINFO_SOC_IO_NEOLED
Definition neorv32_sysinfo.h:79
@ SYSINFO_SOC_IO_TWI
Definition neorv32_sysinfo.h:72
@ SYSINFO_SOC_IO_UART0
Definition neorv32_sysinfo.h:70
@ SYSINFO_SOC_IO_DMA
Definition neorv32_sysinfo.h:67
@ SYSINFO_SOC_IO_SLINK
Definition neorv32_sysinfo.h:82
@ SYSINFO_SOC_IO_TWD
Definition neorv32_sysinfo.h:66
@ SYSINFO_SOC_IO_TRACEBUF
Definition neorv32_sysinfo.h:80
@ SYSINFO_SOC_OCD
Definition neorv32_sysinfo.h:57
@ SYSINFO_SOC_SIM
Definition neorv32_sysinfo.h:84
@ SYSINFO_SOC_IO_TRNG
Definition neorv32_sysinfo.h:76
@ SYSINFO_SOC_IO_GPTMR
Definition neorv32_sysinfo.h:81
@ SYSINFO_SOC_IO_SPI
Definition neorv32_sysinfo.h:71
@ SYSINFO_SOC_IO_UART1
Definition neorv32_sysinfo.h:78
@ SYSINFO_SOC_DMEM
Definition neorv32_sysinfo.h:56
@ SYSINFO_SOC_IO_GPIO
Definition neorv32_sysinfo.h:68
@ SYSINFO_SOC_BOOTLOADER
Definition neorv32_sysinfo.h:53
@ SYSINFO_SOC_IO_SDI
Definition neorv32_sysinfo.h:77
@ SYSINFO_SOC_IO_PWM
Definition neorv32_sysinfo.h:73
@ SYSINFO_SOC_DCACHE
Definition neorv32_sysinfo.h:59
@ SYSINFO_SOC_IMEM
Definition neorv32_sysinfo.h:55
@ SYSINFO_SOC_IO_ONEWIRE
Definition neorv32_sysinfo.h:83
@ SYSINFO_SOC_IMEM_ROM
Definition neorv32_sysinfo.h:65
@ SYSINFO_SOC_SMC
Definition neorv32_sysinfo.h:60
@ SYSINFO_SOC_IO_CLINT
Definition neorv32_sysinfo.h:69
@ SYSINFO_SOC_XBUS
Definition neorv32_sysinfo.h:54
@ SYSINFO_SOC_IO_CFS
Definition neorv32_sysinfo.h:75
@ SYSINFO_SOC_IO_WDT
Definition neorv32_sysinfo.h:74
static uint32_t neorv32_sysinfo_get_clk(void)
Definition neorv32_sysinfo.h:177
static uint32_t neorv32_sysinfo_get_bootmode(void)
Definition neorv32_sysinfo.h:145
Definition neorv32_sysinfo.h:25
uint32_t CLK
Definition neorv32_sysinfo.h:26
const uint32_t MISC
Definition neorv32_sysinfo.h:27
const uint32_t SOC
Definition neorv32_sysinfo.h:28
const uint32_t CACHE
Definition neorv32_sysinfo.h:29