Baremetal-NN
Baremetal-NN API documentation
Loading...
Searching...
No Matches
rv.h
Go to the documentation of this file.
1
21#ifndef __RV_H
22#define __RV_H
23
24#include <stdint.h>
25#include <stddef.h>
26
27
28/* ================ Memory register attributes ================ */
29// #ifdef __cplusplus
30// #define __I volatile /** Defines "read only" permissions */
31// #else
32// #define __I volatile const /** Defines "read only" permissions */
33// #endif
34// #define __O volatile /** Defines "write only" permissions */
35// #define __IO volatile /** Defines "read / write" permissions */
36
37// /* following defines should be used for structure members */
38// #define __IM volatile const /** Defines "read only" structure member permissions */
39// #define __OM volatile /** Defines "write only" structure member permissions */
40// #define __IOM volatile /** Defines "read / write" structure member permissions */
41
42
43/* ================ Bit Operation definitions ================ */
44#define SET_BITS(REG, BIT) ((REG) |= (BIT))
45#define CLEAR_BITS(REG, BIT) ((REG) &= ~(BIT))
46#define READ_BITS(REG, BIT) ((REG) & (BIT))
47#define WRITE_BITS(REG, CLEARMASK, SETMASK) ((REG) = (((REG) & (~(CLEARMASK))) | (SETMASK)))
48
49
50/* ================ RISC-V specific definitions ================ */
51#define READ_CSR(REG) ({ \
52 unsigned long __tmp; \
53 asm volatile ("csrr %0, " REG : "=r"(__tmp)); \
54 __tmp; })
55
56#define WRITE_CSR(REG, VAL) ({ \
57 asm volatile ("csrw " REG ", %0" :: "rK"(VAL)); })
58
59#define SWAP_CSR(REG, VAL) ({ \
60 unsigned long __tmp; \
61 asm volatile ("csrrw %0, " REG ", %1" : "=r"(__tmp) : "rK"(VAL)); \
62 __tmp; })
63
64#define SET_CSR_BITS(REG, BIT) ({ \
65 unsigned long __tmp; \
66 asm volatile ("csrrs %0, " REG ", %1" : "=r"(__tmp) : "rK"(BIT)); \
67 __tmp; })
68
69#define CLEAR_CSR_BITS(REG, BIT) ({ \
70 unsigned long __tmp; \
71 asm volatile ("csrrc %0, " REG ", %1" : "=r"(__tmp) : "rK"(BIT)); \
72 __tmp; })
73
74
75/* ================ Common definitions ================ */
76typedef enum {
77 RESET = 0UL,
79
82
85} State;
86
87typedef enum {
88 OK = 0U,
93
94#endif /* __RV_H */
State
Definition: rv.h:76
@ HIGH
Definition: rv.h:84
@ RESET
Definition: rv.h:77
@ LOW
Definition: rv.h:83
@ ENABLE
Definition: rv.h:81
@ SET
Definition: rv.h:78
@ DISABLE
Definition: rv.h:80
Status
Definition: rv.h:87
@ OK
Definition: rv.h:88
@ ERROR
Definition: rv.h:89
@ BUSY
Definition: rv.h:90
@ TIMEOUT
Definition: rv.h:91