OpenCores
URL https://opencores.org/ocsvn/potato/potato/trunk

Subversion Repositories potato

[/] [potato/] [trunk/] [benchmarks/] [potato.h] - Blame information for rev 65

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 13 skordal
// The Potato Processor
2
// (c) Kristian Klomsten Skordal 2015 <kristian.skordal@wafflemail.net>
3
// Report bugs and issues on <http://opencores.org/project,potato,bugtracker>
4
 
5
#ifndef POTATO_H
6
#define POTATO_H
7
 
8 65 skordal
// Number of IRQs supported:
9
#define POTATO_NUM_IRQS         8
10
 
11
// Implementation-specific CSRs:
12
#define CSR_PP_CACHECTRL        0x790
13
 
14 13 skordal
// Exception cause values:
15
#define CAUSE_INSTR_MISALIGN    0x00
16
#define CAUSE_INSTR_FETCH       0x01
17
#define CAUSE_INVALID_INSTR     0x02
18 58 skordal
#define CAUSE_BREAKPOINT        0x03
19
#define CAUSE_LOAD_MISALIGN     0x04
20
#define CAUSE_LOAD_ERROR        0x05
21
#define CAUSE_STORE_MISALIGN    0x06
22
#define CAUSE_STORE_ERROR       0x07
23
#define CAUSE_ECALL             0x0b
24 13 skordal
 
25
#define CAUSE_IRQ_BASE          0x10
26
 
27 58 skordal
// Interrupt bit in the cause register:
28
#define CAUSE_INTERRUPT_BIT     31
29
 
30 13 skordal
// Status register bit indices:
31 58 skordal
#define STATUS_IE       0                // Enable Interrupts
32
#define STATUS_IE1      3               // Previous value of Enable Interrupts
33 13 skordal
 
34 65 skordal
// Cache control register bit indices:
35
#define CSR_PP_CACHECTRL_ICACHE_EN      0
36
 
37 58 skordal
#define potato_enable_interrupts()      asm volatile("csrsi mstatus, 1 << %[ie_bit]\n" \
38
                :: [ie_bit] "i" (STATUS_IE))
39
#define potato_disable_interrupts()     asm volatile("csrci mstatus, 1 << %[ie_bit] | 1 << %[ie1_bit]\n" \
40
                :: [ie_bit] "i" (STATUS_IE), [ie1_bit] "i" (STATUS_IE1))
41 13 skordal
 
42 45 skordal
#define potato_write_host(data) \
43
        do { \
44
                register uint32_t temp = data; \
45 58 skordal
                asm volatile("csrw mtohost, %[temp]\n" \
46
                        :: [temp] "r" (temp)); \
47 45 skordal
        } while(0);
48
 
49 13 skordal
#define potato_enable_irq(n) \
50
        do { \
51
                register uint32_t temp = 0; \
52
                asm volatile( \
53
                        "li %[temp], 1 << %[shift]\n" \
54 58 skordal
                        "csrs mie, %[temp]\n" \
55
                        :: [temp] "r" (temp), [shift] "i" (n + 24)); \
56 13 skordal
        } while(0)
57
 
58
#define potato_disable_irq(n) \
59
        do { \
60
                register uint32_t temp = 0; \
61
                asm volatile( \
62
                        "li %[temp], 1 << %[shift]\n" \
63 58 skordal
                        "csrc mie, %[temp]\n" \
64
                        :: [temp] "r" (temp), [shift] "i" (n + 24);) \
65 13 skordal
        } while(0)
66
 
67 58 skordal
#define potato_get_badaddr(n) \
68 13 skordal
        do { \
69 22 skordal
                register uint32_t __temp = 0; \
70 13 skordal
                asm volatile ( \
71 58 skordal
                        "csrr %[temp], mbadaddr\n" \
72
                        : [temp] "=r" (__temp)); \
73 22 skordal
                n = __temp; \
74 13 skordal
        } while(0)
75
 
76
#endif
77
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.