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
|
#include "xil_printf.h"
#include "xparameters.h"
#include "xparameters_ps.h"
#include "xspips.h"
#include "xspips_hw.h"
#include "sleep.h"
#define prescaler 16
#define data_length 16
#define data_count data_length/8
int main(void){
xil_printf("0");
XSpiPs_Config* spi_config=XSpiPs_LookupConfig(XPAR_SPI0_BASEADDR);
XSpiPs spi;
XSpiPs_CfgInitialize(&spi,spi_config,XPAR_SPI0_BASEADDR);
u32 options=XSPIPS_MASTER_OPTION|XSPIPS_CLK_ACTIVE_LOW_OPTION|XSPIPS_CLK_PHASE_1_OPTION;
XSpiPs_SetOptions(&spi,options);
xil_printf("a");
XSpiPs_SetClkPrescaler(&spi,XSPIPS_CLK_PRESCALE_16);
xil_printf("b");
//dac data
u16 mode1=0b1100;
u16 data1=1024;
// high voltage
u16 send1=(mode1<<12)|(data1);
u8 send1_buf[2];
send1_buf[0]=send1>>8;
send1_buf[1]=send1&0xff;
u8 sleep_time=1;
// low voltage
u16 data2=0;
u16 send2=(mode1<<12)|(data2);
u8 send2_buf[2];
send2_buf[0]=send2>>8;
send2_buf[1]=send2&0xff;
XSpiPs_Enable(&spi);
XSpiPs_SetSlaveSelect(&spi,0x00);
xil_printf("1");
while(1){
//sleep(1);
sleep(sleep_time);
//XSpiPs_SetSlaveSelect(&spi,0x01);
XSpiPs_Enable(&spi);
XSpiPs_PolledTransfer(&spi, send1_buf, NULL, 2);
// xil_printf("2");
// XSpiPs_Transfer(&spi, send1_buf, NULL, 2);
//sleep(1);
sleep(sleep_time);
XSpiPs_Enable(&spi);
// XSpiPs_SetSlaveSelect(&spi,0x01);
XSpiPs_PolledTransfer(&spi, send2_buf, NULL, 2);
//xil_printf("3");
//XSpiPs_Transfer(&spi, send2_buf, NULL, 2);
}
}
|