1 | //SPI Device Id aus XParameter.h
|
2 | #define SPI_DEVICE_ID XPAR_SPI_0_DEVICE_ID
|
3 |
|
4 |
|
5 | #define BUFFER_SIZE 12 //Buffergröße
|
6 | #define DAC_Anzahl 2000000 //Anzahl Lese/Schreib Vorgänge
|
7 |
|
8 |
|
9 | typedef u8 DataBuffer[BUFFER_SIZE]; //Bufferdefenition
|
10 |
|
11 |
|
12 | //SPI
|
13 | static XSpi DAC_SPI; /* The instance of the SPI device */
|
14 |
|
15 |
|
16 | //Lese/Schreib-Buffer
|
17 | u8 ReadBuffer[BUFFER_SIZE];
|
18 | u8 WriteBuffer[BUFFER_SIZE];
|
19 |
|
20 |
|
21 | //SPI Test
|
22 | int DAC_SPI_test(void)
|
23 | {
|
24 | int Status;
|
25 | u32 Count;
|
26 | u32 Count1;
|
27 | u32 Count2;
|
28 | u32 Delay;
|
29 |
|
30 | XStatus status = XST_SUCCESS;
|
31 | status = XSpi_Initialize(&DAC_SPI, SPI_DEVICE_ID);
|
32 |
|
33 | switch(status)
|
34 | {
|
35 | case XST_SUCCESS: print("Status: Erfolgreich initialisiert\n\r"); break;
|
36 | case XST_DEVICE_IS_STARTED: print("Status: Device is started\n\r"); break;
|
37 | case XST_DEVICE_NOT_FOUND: print("Status: Device not found\n\r"); break;
|
38 | }
|
39 |
|
40 | Xuint32 options = XSP_MASTER_OPTION;
|
41 | status = XSpi_SetOptions(&DAC_SPI, options);
|
42 |
|
43 | switch(status)
|
44 | {
|
45 | case XST_SUCCESS: print("Status: Erfolgreich option gesetzt\n\r"); break;
|
46 | case XST_DEVICE_BUSY: print("Status: Device busy\n\r"); break;
|
47 | case XST_SPI_SLAVE_ONLY: print("Status: Slave only\n\r"); break;
|
48 | }
|
49 |
|
50 | XSpi_SetSlaveSelect(&DAC_SPI, 1);
|
51 | XSpi_Start(&DAC_SPI);
|
52 |
|
53 |
|
54 | //Interrupts disable
|
55 | XSpi_IntrGlobalDisable(&DAC_SPI);
|
56 |
|
57 | //Anzahl der Datenübertragung
|
58 | for(Count=0;Count<DAC_Anzahl;Count++){
|
59 |
|
60 | //Ausgaberegister beschreiben
|
61 | WriteBuffer[0] = 1; //Single Ended=1, diff. Ended=0 S/D
|
62 | WriteBuffer[1] = 0; //ODD = 1 , SIGN = 0 O/S
|
63 | WriteBuffer[2] = 0; //Adress selecet bit1 S1
|
64 | WriteBuffer[3] = 0; //Adress selecet bit0 S0
|
65 | WriteBuffer[4] = 1; //Unipolar=1, Bipolar=0
|
66 | WriteBuffer[5] = 0; //SleepMode=1, NapMode=0
|
67 |
|
68 |
|
69 | /*
|
70 | * O/S=0
|
71 | * S1=0
|
72 | * S0=0
|
73 | * => CH0 selected => TUNE_INDICATOR //Signal an Channel 0
|
74 | */
|
75 |
|
76 |
|
77 | //Daten Übertragen
|
78 | Status=XSpi_Transfer(&DAC_SPI, WriteBuffer, ReadBuffer, BUFFER_SIZE);
|
79 | switch(Status)
|
80 | {
|
81 | case XST_SUCCESS: print("Status: Erfolgreich gesendet.\n\r"); break;
|
82 | case XST_DEVICE_IS_STOPPED: print("Status: Device stopped\n\r"); break;
|
83 | case XST_DEVICE_BUSY: print("Status: Device busy\n\r"); break;
|
84 | case XST_SPI_NO_SLAVE: print("Status: Device no slave\n\r"); break;
|
85 | }
|
86 |
|
87 |
|
88 | //Recive Daten Ausgeben
|
89 | for (Count1 = 0; Count1 < BUFFER_SIZE; Count1++) {
|
90 | xil_printf("ADC Wert %x: %d\n\r",Count1,ReadBuffer[Count1]);
|
91 | }
|
92 | for (Delay = 0; Delay < 500; Delay++);
|
93 | }
|
94 |
|
95 | return XST_SUCCESS;
|
96 | }
|