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

Subversion Repositories ha1588

[/] [ha1588/] [trunk/] [sim/] [top/] [ptp_drv_bfm/] [ptp_drv_bfm.c] - Blame information for rev 26

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 21 edn_walter
#include <stdio.h>
2
 
3
#include "svdpi.h"
4
#include "../dpiheader.h"
5
int ptp_drv_bfm_c(double fw_delay)
6
{
7 26 edn_walter
  unsigned int cpu_addr_i;
8
  unsigned int cpu_data_i;
9
  unsigned int cpu_data_o;
10 21 edn_walter
 
11 22 edn_walter
  // LOAD RTC PERIOD AND ACC_MODULO
12
  cpu_addr_i = 0x00000020;
13
  cpu_data_i = 0x8;
14
  cpu_wr(cpu_addr_i, cpu_data_i);
15
  cpu_addr_i = 0x00000024;
16
  cpu_data_i = 0x0;
17
  cpu_wr(cpu_addr_i, cpu_data_i);
18
  cpu_addr_i = 0x00000028;
19
  cpu_data_i = 0x3B9ACA00;
20
  cpu_wr(cpu_addr_i, cpu_data_i);
21
  cpu_addr_i = 0x0000002C;
22
  cpu_data_i = 0x0;
23
  cpu_wr(cpu_addr_i, cpu_data_i);
24
  cpu_addr_i = 0x00000000;
25 23 edn_walter
  cpu_data_i = 0x0;
26
  cpu_wr(cpu_addr_i, cpu_data_i);
27
  cpu_addr_i = 0x00000000;
28 22 edn_walter
  cpu_data_i = 0x4;
29
  cpu_wr(cpu_addr_i, cpu_data_i);
30 23 edn_walter
  // RESET RTC
31 22 edn_walter
  cpu_addr_i = 0x00000000;
32
  cpu_data_i = 0x0;
33
  cpu_wr(cpu_addr_i, cpu_data_i);
34
  cpu_addr_i = 0x00000000;
35 24 edn_walter
  cpu_data_i = 0xA10;
36 22 edn_walter
  cpu_wr(cpu_addr_i, cpu_data_i);
37 26 edn_walter
  // READ RTC SEC AND NS
38
  cpu_addr_i = 0x00000000;
39
  cpu_data_i = 0x0;
40
  cpu_wr(cpu_addr_i, cpu_data_i);
41
  cpu_addr_i = 0x00000000;
42
  cpu_data_i = 0x1;
43
  cpu_wr(cpu_addr_i, cpu_data_i);
44
  do {
45
    cpu_addr_i = 0x00000000;
46
    cpu_rd(cpu_addr_i, &cpu_data_o);
47
    //printf("%08x\n", (cpu_data_o & 0x1));
48
  } while ((cpu_data_o & 0x1) == 0x0);
49
  cpu_addr_i = 0X00000040;
50
  cpu_rd(cpu_addr_i, &cpu_data_o);
51
  printf("\ntime: \n%08x\n", cpu_data_o);
52
  cpu_addr_i = 0X00000044;
53
  cpu_rd(cpu_addr_i, &cpu_data_o);
54
  printf("%08x\n", cpu_data_o);
55
  cpu_addr_i = 0X00000048;
56
  cpu_rd(cpu_addr_i, &cpu_data_o);
57
  printf("%08x\n", cpu_data_o);
58
  cpu_addr_i = 0X0000004C;
59
  cpu_rd(cpu_addr_i, &cpu_data_o);
60
  printf("%08x\n", cpu_data_o);
61 22 edn_walter
  // LOAD RTC SEC AND NS
62
  cpu_addr_i = 0x00000010;
63
  cpu_data_i = 0x0;
64
  cpu_wr(cpu_addr_i, cpu_data_i);
65
  cpu_addr_i = 0x00000014;
66
  cpu_data_i = 0x1;
67
  cpu_wr(cpu_addr_i, cpu_data_i);
68
  cpu_addr_i = 0x00000018;
69
  cpu_data_i = 0x3B9AC9F6;
70
  cpu_wr(cpu_addr_i, cpu_data_i);
71
  cpu_addr_i = 0x0000001C;
72
  cpu_data_i = 0x0;
73
  cpu_wr(cpu_addr_i, cpu_data_i);
74
  cpu_addr_i = 0x00000000;
75 23 edn_walter
  cpu_data_i = 0x0;
76 22 edn_walter
  cpu_wr(cpu_addr_i, cpu_data_i);
77
  cpu_addr_i = 0x00000000;
78 23 edn_walter
  cpu_data_i = 0x8;
79 22 edn_walter
  cpu_wr(cpu_addr_i, cpu_data_i);
80
  // LOAD RTC ADJ
81
  cpu_addr_i = 0x00000030;
82
  cpu_data_i = 0x100;
83
  cpu_wr(cpu_addr_i, cpu_data_i);
84
  cpu_addr_i = 0x00000038;
85
  cpu_data_i = 0x1;
86
  cpu_wr(cpu_addr_i, cpu_data_i);
87
  cpu_addr_i = 0x0000003C;
88
  cpu_data_i = 0x20;
89
  cpu_wr(cpu_addr_i, cpu_data_i);
90
  cpu_addr_i = 0x00000000;
91 23 edn_walter
  cpu_data_i = 0x0;
92
  cpu_wr(cpu_addr_i, cpu_data_i);
93
  cpu_addr_i = 0x00000000;
94 22 edn_walter
  cpu_data_i = 0x2;
95
  cpu_wr(cpu_addr_i, cpu_data_i);
96 23 edn_walter
  // READ RTC SEC AND NS
97 22 edn_walter
  cpu_addr_i = 0x00000000;
98
  cpu_data_i = 0x0;
99
  cpu_wr(cpu_addr_i, cpu_data_i);
100
  cpu_addr_i = 0x00000000;
101
  cpu_data_i = 0x1;
102
  cpu_wr(cpu_addr_i, cpu_data_i);
103 24 edn_walter
  do {
104
    cpu_addr_i = 0x00000000;
105
    cpu_rd(cpu_addr_i, &cpu_data_o);
106
    //printf("%08x\n", (cpu_data_o & 0x1));
107
  } while ((cpu_data_o & 0x1) == 0x0);
108 23 edn_walter
  cpu_addr_i = 0X00000040;
109
  cpu_rd(cpu_addr_i, &cpu_data_o);
110 26 edn_walter
  printf("\ntime: \n%08x\n", cpu_data_o);
111 23 edn_walter
  cpu_addr_i = 0X00000044;
112
  cpu_rd(cpu_addr_i, &cpu_data_o);
113 26 edn_walter
  printf("%08x\n", cpu_data_o);
114 23 edn_walter
  cpu_addr_i = 0X00000048;
115
  cpu_rd(cpu_addr_i, &cpu_data_o);
116 26 edn_walter
  printf("%08x\n", cpu_data_o);
117 23 edn_walter
  cpu_addr_i = 0X0000004C;
118
  cpu_rd(cpu_addr_i, &cpu_data_o);
119 26 edn_walter
  printf("%08x\n", cpu_data_o);
120 22 edn_walter
 
121 24 edn_walter
  int i;
122
  // POLL TSU RX STATUS
123
  int rx_queue_num;
124
  do {
125
    cpu_addr_i = 0x00000004;
126
    cpu_rd(cpu_addr_i, &cpu_data_o);
127
    rx_queue_num = cpu_data_o;
128
    //printf("%08x\n", rx_queue_num);
129
  } while (!(rx_queue_num > 0x2));
130
  // READ TSU RX FIFO
131 26 edn_walter
  for (i=rx_queue_num; i>0; i--) {
132 24 edn_walter
      cpu_addr_i = 0x00000000;
133
      cpu_data_i = 0x0;
134
      cpu_wr(cpu_addr_i, cpu_data_i);
135
      cpu_addr_i = 0x00000000;
136
      cpu_data_i = 0x400;
137
      cpu_wr(cpu_addr_i, cpu_data_i);
138
      cpu_addr_i = 0x00000050;
139
      cpu_rd(cpu_addr_i, &cpu_data_o);
140 26 edn_walter
      printf("\nRx stamp: \n%08x\n", cpu_data_o);
141 24 edn_walter
      cpu_addr_i = 0x00000054;
142
      cpu_rd(cpu_addr_i, &cpu_data_o);
143 26 edn_walter
      printf("%08x\n", cpu_data_o);
144 24 edn_walter
  }
145
  // POLL TSU TX STATUS
146
  int tx_queue_num;
147
  do {
148
    cpu_addr_i = 0x00000008;
149
    cpu_rd(cpu_addr_i, &cpu_data_o);
150
    tx_queue_num = cpu_data_o;
151
    //printf("%08x\n", tx_queue_num);
152
  } while (!(tx_queue_num > 0x2));
153
  // READ TSU TX FIFO
154 26 edn_walter
  for (i=tx_queue_num; i>0; i--) {
155 24 edn_walter
      cpu_addr_i = 0x00000000;
156
      cpu_data_i = 0x0;
157
      cpu_wr(cpu_addr_i, cpu_data_i);
158
      cpu_addr_i = 0x00000000;
159
      cpu_data_i = 0x100;
160
      cpu_wr(cpu_addr_i, cpu_data_i);
161
      cpu_addr_i = 0x00000058;
162
      cpu_rd(cpu_addr_i, &cpu_data_o);
163 26 edn_walter
      printf("\nTx stamp: \n%08x\n", cpu_data_o);
164 24 edn_walter
      cpu_addr_i = 0x0000005C;
165
      cpu_rd(cpu_addr_i, &cpu_data_o);
166 26 edn_walter
      printf("%08x\n", cpu_data_o);
167 24 edn_walter
  }
168
 
169 22 edn_walter
  // READ BACK ALL REGISTERS
170
  for (;;)
171 21 edn_walter
  {
172 22 edn_walter
    int t;
173
    for (t=0; t<=0x5c; t=t+4)
174
    {
175 24 edn_walter
      cpu_hd(10);
176
 
177 22 edn_walter
      cpu_addr_i = t;
178 21 edn_walter
      cpu_rd(cpu_addr_i, &cpu_data_o);
179 22 edn_walter
    }
180 21 edn_walter
  }
181
 
182
  return(0); /* Return success (required by tasks) */
183
}

powered by: WebSVN 2.1.0

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