summaryrefslogtreecommitdiffstats
path: root/zpu/roadshow/roadshow/loop/looptest.c
blob: 5ae197a696b6cd13f67fab0f4d7e293daab71c43 (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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/* This is a peek & poke example for an FPGA. 

   It should loop at a frequency of ~50 instructions. If
   the ZPU(small) is running at 25MHz, then this would yield
   a peek & poke every 8ms or so.

  zpu-elf-gcc -O3 -zeta looptest.c -o looptest.elf -Wl,--relax -Wl,--gc-sections */


/*
0000051c <main>:
 51c:   ff              im -1
 51d:   3d              pushspadd
 51e:   0d              popsp
 51f:   80              im 0
 520:   52              storesp 8

00000521 <.L2>:
 521:   81              im 1
 522:   12              addsp 8
 523:   82              im 2
 524:   80              im 0
 525:   80              im 0
 526:   08              load
 527:   71              loadsp 4
 528:   82              im 2
 529:   80              im 0
 52a:   90              im 16
 52b:   0c              store
 52c:   81              im 1
 52d:   12              addsp 8
 52e:   82              im 2
 52f:   80              im 0
 530:   80              im 0
 531:   08              load
 532:   71              loadsp 4
 533:   82              im 2
 534:   80              im 0
 535:   90              im 16
 536:   0c              store
 537:   52              storesp 8
 538:   52              storesp 8
 539:   52              storesp 8
 53a:   52              storesp 8
 53b:   e5              im -27
 53c:   39              poppcrel
*/
#define FPGA_ADDR                       0x8000

typedef  volatile unsigned int* pAddr;
#define FPGA_READ         *(pAddr) (FPGA_ADDR)

#define FPGA_WRITE         *(pAddr) (FPGA_ADDR + 16)


int main(int argc, char **argv)
{
int i;
int j = 0;

    while (1)

    {
    j++;
    i =  FPGA_READ;
    FPGA_WRITE = j;
    }
} 
OpenPOWER on IntegriCloud