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

Subversion Repositories vspi

[/] [vspi/] [trunk/] [projnav/] [xps/] [drivers/] [spiifc_v1_00_a/] [src/] [spiifc_selftest.c] - Blame information for rev 14

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 14 mjlyons
/*****************************************************************************
2
* Filename:          C:\Users\mjlyons\workspace\vSPI\projnav\xps/drivers/spiifc_v1_00_a/src/spiifc_selftest.c
3
* Version:           1.00.a
4
* Description:       Contains a diagnostic self-test function for the spiifc driver
5
* Date:              Tue Feb 28 11:11:28 2012 (by Create and Import Peripheral Wizard)
6
*****************************************************************************/
7
 
8
 
9
/***************************** Include Files *******************************/
10
 
11
#include "spiifc.h"
12
 
13
/************************** Constant Definitions ***************************/
14
 
15
 
16
/************************** Variable Definitions ****************************/
17
 
18
extern Xuint32 LocalBRAM; /* User logic local memory (BRAM) base address */
19
 
20
/************************** Function Definitions ***************************/
21
 
22
/**
23
 *
24
 * Run a self-test on the driver/device. Note this may be a destructive test if
25
 * resets of the device are performed.
26
 *
27
 * If the hardware system is not built correctly, this function may never
28
 * return to the caller.
29
 *
30
 * @param   baseaddr_p is the base address of the SPIIFC instance to be worked on.
31
 *
32
 * @return
33
 *
34
 *    - XST_SUCCESS   if all self-test code passed
35
 *    - XST_FAILURE   if any self-test code failed
36
 *
37
 * @note    Caching must be turned off for this function to work.
38
 * @note    Self test may fail if data memory and device are not on the same bus.
39
 *
40
 */
41
XStatus SPIIFC_SelfTest(void * baseaddr_p)
42
{
43
  int     Index;
44
  Xuint32 baseaddr;
45
  Xuint8  Reg8Value;
46
  Xuint16 Reg16Value;
47
  Xuint32 Reg32Value;
48
  Xuint32 Mem32Value;
49
 
50
  /*
51
   * Check and get the device address
52
   */
53
  /*
54
   * Base Address maybe 0. Up to developer to uncomment line below.
55
  XASSERT_NONVOID(baseaddr_p != XNULL);
56
   */
57
  baseaddr = (Xuint32) baseaddr_p;
58
 
59
  xil_printf("******************************\n\r");
60
  xil_printf("* User Peripheral Self Test\n\r");
61
  xil_printf("******************************\n\n\r");
62
 
63
  /*
64
   * Write to user logic slave module register(s) and read back
65
   */
66
  xil_printf("User logic slave module test...\n\r");
67
  xil_printf("   - write 1 to slave register 0 word 0\n\r");
68
  SPIIFC_mWriteSlaveReg0(baseaddr, 0, 1);
69
  Reg32Value = SPIIFC_mReadSlaveReg0(baseaddr, 0);
70
  xil_printf("   - read %d from register 0 word 0\n\r", Reg32Value);
71
  if ( Reg32Value != (Xuint32) 1 )
72
  {
73
    xil_printf("   - slave register 0 word 0 write/read failed\n\r");
74
    return XST_FAILURE;
75
  }
76
  xil_printf("   - write 2 to slave register 1 word 0\n\r");
77
  SPIIFC_mWriteSlaveReg1(baseaddr, 0, 2);
78
  Reg32Value = SPIIFC_mReadSlaveReg1(baseaddr, 0);
79
  xil_printf("   - read %d from register 1 word 0\n\r", Reg32Value);
80
  if ( Reg32Value != (Xuint32) 2 )
81
  {
82
    xil_printf("   - slave register 1 word 0 write/read failed\n\r");
83
    return XST_FAILURE;
84
  }
85
  xil_printf("   - write 3 to slave register 2 word 0\n\r");
86
  SPIIFC_mWriteSlaveReg2(baseaddr, 0, 3);
87
  Reg32Value = SPIIFC_mReadSlaveReg2(baseaddr, 0);
88
  xil_printf("   - read %d from register 2 word 0\n\r", Reg32Value);
89
  if ( Reg32Value != (Xuint32) 3 )
90
  {
91
    xil_printf("   - slave register 2 word 0 write/read failed\n\r");
92
    return XST_FAILURE;
93
  }
94
  xil_printf("   - write 4 to slave register 3 word 0\n\r");
95
  SPIIFC_mWriteSlaveReg3(baseaddr, 0, 4);
96
  Reg32Value = SPIIFC_mReadSlaveReg3(baseaddr, 0);
97
  xil_printf("   - read %d from register 3 word 0\n\r", Reg32Value);
98
  if ( Reg32Value != (Xuint32) 4 )
99
  {
100
    xil_printf("   - slave register 3 word 0 write/read failed\n\r");
101
    return XST_FAILURE;
102
  }
103
  xil_printf("   - write 5 to slave register 4 word 0\n\r");
104
  SPIIFC_mWriteSlaveReg4(baseaddr, 0, 5);
105
  Reg32Value = SPIIFC_mReadSlaveReg4(baseaddr, 0);
106
  xil_printf("   - read %d from register 4 word 0\n\r", Reg32Value);
107
  if ( Reg32Value != (Xuint32) 5 )
108
  {
109
    xil_printf("   - slave register 4 word 0 write/read failed\n\r");
110
    return XST_FAILURE;
111
  }
112
  xil_printf("   - write 6 to slave register 5 word 0\n\r");
113
  SPIIFC_mWriteSlaveReg5(baseaddr, 0, 6);
114
  Reg32Value = SPIIFC_mReadSlaveReg5(baseaddr, 0);
115
  xil_printf("   - read %d from register 5 word 0\n\r", Reg32Value);
116
  if ( Reg32Value != (Xuint32) 6 )
117
  {
118
    xil_printf("   - slave register 5 word 0 write/read failed\n\r");
119
    return XST_FAILURE;
120
  }
121
  xil_printf("   - write 7 to slave register 6 word 0\n\r");
122
  SPIIFC_mWriteSlaveReg6(baseaddr, 0, 7);
123
  Reg32Value = SPIIFC_mReadSlaveReg6(baseaddr, 0);
124
  xil_printf("   - read %d from register 6 word 0\n\r", Reg32Value);
125
  if ( Reg32Value != (Xuint32) 7 )
126
  {
127
    xil_printf("   - slave register 6 word 0 write/read failed\n\r");
128
    return XST_FAILURE;
129
  }
130
  xil_printf("   - write 8 to slave register 7 word 0\n\r");
131
  SPIIFC_mWriteSlaveReg7(baseaddr, 0, 8);
132
  Reg32Value = SPIIFC_mReadSlaveReg7(baseaddr, 0);
133
  xil_printf("   - read %d from register 7 word 0\n\r", Reg32Value);
134
  if ( Reg32Value != (Xuint32) 8 )
135
  {
136
    xil_printf("   - slave register 7 word 0 write/read failed\n\r");
137
    return XST_FAILURE;
138
  }
139
  xil_printf("   - write 9 to slave register 8 word 0\n\r");
140
  SPIIFC_mWriteSlaveReg8(baseaddr, 0, 9);
141
  Reg32Value = SPIIFC_mReadSlaveReg8(baseaddr, 0);
142
  xil_printf("   - read %d from register 8 word 0\n\r", Reg32Value);
143
  if ( Reg32Value != (Xuint32) 9 )
144
  {
145
    xil_printf("   - slave register 8 word 0 write/read failed\n\r");
146
    return XST_FAILURE;
147
  }
148
  xil_printf("   - write 10 to slave register 9 word 0\n\r");
149
  SPIIFC_mWriteSlaveReg9(baseaddr, 0, 10);
150
  Reg32Value = SPIIFC_mReadSlaveReg9(baseaddr, 0);
151
  xil_printf("   - read %d from register 9 word 0\n\r", Reg32Value);
152
  if ( Reg32Value != (Xuint32) 10 )
153
  {
154
    xil_printf("   - slave register 9 word 0 write/read failed\n\r");
155
    return XST_FAILURE;
156
  }
157
  xil_printf("   - write 11 to slave register 10 word 0\n\r");
158
  SPIIFC_mWriteSlaveReg10(baseaddr, 0, 11);
159
  Reg32Value = SPIIFC_mReadSlaveReg10(baseaddr, 0);
160
  xil_printf("   - read %d from register 10 word 0\n\r", Reg32Value);
161
  if ( Reg32Value != (Xuint32) 11 )
162
  {
163
    xil_printf("   - slave register 10 word 0 write/read failed\n\r");
164
    return XST_FAILURE;
165
  }
166
  xil_printf("   - write 12 to slave register 11 word 0\n\r");
167
  SPIIFC_mWriteSlaveReg11(baseaddr, 0, 12);
168
  Reg32Value = SPIIFC_mReadSlaveReg11(baseaddr, 0);
169
  xil_printf("   - read %d from register 11 word 0\n\r", Reg32Value);
170
  if ( Reg32Value != (Xuint32) 12 )
171
  {
172
    xil_printf("   - slave register 11 word 0 write/read failed\n\r");
173
    return XST_FAILURE;
174
  }
175
  xil_printf("   - write 13 to slave register 12 word 0\n\r");
176
  SPIIFC_mWriteSlaveReg12(baseaddr, 0, 13);
177
  Reg32Value = SPIIFC_mReadSlaveReg12(baseaddr, 0);
178
  xil_printf("   - read %d from register 12 word 0\n\r", Reg32Value);
179
  if ( Reg32Value != (Xuint32) 13 )
180
  {
181
    xil_printf("   - slave register 12 word 0 write/read failed\n\r");
182
    return XST_FAILURE;
183
  }
184
  xil_printf("   - write 14 to slave register 13 word 0\n\r");
185
  SPIIFC_mWriteSlaveReg13(baseaddr, 0, 14);
186
  Reg32Value = SPIIFC_mReadSlaveReg13(baseaddr, 0);
187
  xil_printf("   - read %d from register 13 word 0\n\r", Reg32Value);
188
  if ( Reg32Value != (Xuint32) 14 )
189
  {
190
    xil_printf("   - slave register 13 word 0 write/read failed\n\r");
191
    return XST_FAILURE;
192
  }
193
  xil_printf("   - write 15 to slave register 14 word 0\n\r");
194
  SPIIFC_mWriteSlaveReg14(baseaddr, 0, 15);
195
  Reg32Value = SPIIFC_mReadSlaveReg14(baseaddr, 0);
196
  xil_printf("   - read %d from register 14 word 0\n\r", Reg32Value);
197
  if ( Reg32Value != (Xuint32) 15 )
198
  {
199
    xil_printf("   - slave register 14 word 0 write/read failed\n\r");
200
    return XST_FAILURE;
201
  }
202
  xil_printf("   - write 16 to slave register 15 word 0\n\r");
203
  SPIIFC_mWriteSlaveReg15(baseaddr, 0, 16);
204
  Reg32Value = SPIIFC_mReadSlaveReg15(baseaddr, 0);
205
  xil_printf("   - read %d from register 15 word 0\n\r", Reg32Value);
206
  if ( Reg32Value != (Xuint32) 16 )
207
  {
208
    xil_printf("   - slave register 15 word 0 write/read failed\n\r");
209
    return XST_FAILURE;
210
  }
211
  xil_printf("   - slave register write/read passed\n\n\r");
212
 
213
  /*
214
   * Write data to user logic BRAMs and read back
215
   */
216
  xil_printf("User logic BRAM test...\n\r");
217
  xil_printf("   - local BRAM address is 0x%08x\n\r", LocalBRAM);
218
  xil_printf("   - write pattern to local BRAM and read back\n\r");
219
  for ( Index = 0; Index < 256; Index++ )
220
  {
221
    SPIIFC_mWriteMemory(LocalBRAM+4*Index, 0xDEADBEEF);
222
    Mem32Value = SPIIFC_mReadMemory(LocalBRAM+4*Index);
223
    if ( Mem32Value != 0xDEADBEEF )
224
    {
225
      xil_printf("   - write/read BRAM failed on address 0x%08x\n\r", LocalBRAM+4*Index);
226
      return XST_FAILURE;
227
    }
228
  }
229
  xil_printf("   - write/read BRAM passed\n\n\r");
230
 
231
  /*
232
   * Enable all possible interrupts and clear interrupt status register(s)
233
   */
234
  xil_printf("Interrupt controller test...\n\r");
235
  Reg32Value = SPIIFC_mReadReg(baseaddr, SPIIFC_INTR_IPISR_OFFSET);
236
  xil_printf("   - IP (user logic) interrupt status : 0x%08x\n\r", Reg32Value);
237
  xil_printf("   - clear IP (user logic) interrupt status register\n\r");
238
  SPIIFC_mWriteReg(baseaddr, SPIIFC_INTR_IPISR_OFFSET, Reg32Value);
239
  xil_printf("   - enable all possible interrupt(s)\n\r");
240
  SPIIFC_EnableInterrupt(baseaddr_p);
241
  xil_printf("   - write/read interrupt register passed\n\n\r");
242
 
243
  return XST_SUCCESS;
244
}

powered by: WebSVN 2.1.0

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