blob: 8378576ccb3db1c60ad1ba600a316e2a44095ba9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#include "init.h"
#include "encoding.h"
static volatile unsigned interrupt_count;
static volatile unsigned local;
static unsigned delta = 0x100;
void *increment_count(unsigned hartid, unsigned mcause, void *mepc, void *sp)
{
interrupt_count++;
// There is no guarantee that the interrupt is cleared immediately when
// MTIMECMP is written, so stick around here until that happens.
while (read_csr(mip) & MIP_MTIP) {
MTIMECMP[hartid] = MTIME + delta;
}
return mepc;
}
int main()
{
interrupt_count = 0;
local = 0;
unsigned hartid = read_csr(mhartid);
set_trap_handler(increment_count);
MTIMECMP[hartid] = MTIME - 1;
enable_timer_interrupts();
while (1) {
local++;
}
}
|