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

Subversion Repositories potato

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

Go to most recent revision | 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
// Exception cause values:
9
#define CAUSE_INSTR_MISALIGN    0x00
10
#define CAUSE_INSTR_FETCH       0x01
11
#define CAUSE_INVALID_INSTR     0x02
12 58 skordal
#define CAUSE_BREAKPOINT        0x03
13
#define CAUSE_LOAD_MISALIGN     0x04
14
#define CAUSE_LOAD_ERROR        0x05
15
#define CAUSE_STORE_MISALIGN    0x06
16
#define CAUSE_STORE_ERROR       0x07
17
#define CAUSE_ECALL             0x0b
18 13 skordal
 
19
#define CAUSE_IRQ_BASE          0x10
20
 
21 58 skordal
// Interrupt bit in the cause register:
22
#define CAUSE_INTERRUPT_BIT     31
23
 
24 13 skordal
// Status register bit indices:
25 58 skordal
#define STATUS_IE       0                // Enable Interrupts
26
#define STATUS_IE1      3               // Previous value of Enable Interrupts
27 13 skordal
 
28 58 skordal
#define potato_enable_interrupts()      asm volatile("csrsi mstatus, 1 << %[ie_bit]\n" \
29
                :: [ie_bit] "i" (STATUS_IE))
30
#define potato_disable_interrupts()     asm volatile("csrci mstatus, 1 << %[ie_bit] | 1 << %[ie1_bit]\n" \
31
                :: [ie_bit] "i" (STATUS_IE), [ie1_bit] "i" (STATUS_IE1))
32 13 skordal
 
33 45 skordal
#define potato_write_host(data) \
34
        do { \
35
                register uint32_t temp = data; \
36 58 skordal
                asm volatile("csrw mtohost, %[temp]\n" \
37
                        :: [temp] "r" (temp)); \
38 45 skordal
        } while(0);
39
 
40 13 skordal
#define potato_enable_irq(n) \
41
        do { \
42
                register uint32_t temp = 0; \
43
                asm volatile( \
44
                        "li %[temp], 1 << %[shift]\n" \
45 58 skordal
                        "csrs mie, %[temp]\n" \
46
                        :: [temp] "r" (temp), [shift] "i" (n + 24)); \
47 13 skordal
        } while(0)
48
 
49
#define potato_disable_irq(n) \
50
        do { \
51
                register uint32_t temp = 0; \
52
                asm volatile( \
53
                        "li %[temp], 1 << %[shift]\n" \
54 58 skordal
                        "csrc mie, %[temp]\n" \
55
                        :: [temp] "r" (temp), [shift] "i" (n + 24);) \
56 13 skordal
        } while(0)
57
 
58 58 skordal
#define potato_get_badaddr(n) \
59 13 skordal
        do { \
60 22 skordal
                register uint32_t __temp = 0; \
61 13 skordal
                asm volatile ( \
62 58 skordal
                        "csrr %[temp], mbadaddr\n" \
63
                        : [temp] "=r" (__temp)); \
64 22 skordal
                n = __temp; \
65 13 skordal
        } while(0)
66
 
67
#endif
68
 

powered by: WebSVN 2.1.0

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