zynq中spi的配置
二、实际使用引脚
三、引脚分配
set_property PACKAGE_PIN AC11 [get_ports emio_spi0_m_i_0]
set_property PACKAGE_PIN M8 [get_ports emio_spi0_m_o_0]
set_property PACKAGE_PIN P9 [get_ports emio_spi0_sclk_o_0]
set_property PACKAGE_PIN B13 [get_ports spi_tx_ss_io]
set_property IOSTANDARD LVCMOS33 [get_ports emio_spi0_m_i_0]
set_property IOSTANDARD LVCMOS33 [get_ports emio_spi0_m_o_0]
set_property IOSTANDARD LVCMOS33 [get_ports emio_spi0_sclk_o_0]
set_property IOSTANDARD LVCMOS33 [get_ports spi_tx_ss_io]
四、vitis初始化
XSpiPs SpiInstance;
int SpiPs_Init(XSpiPs *SpiInstancePtr,u16 SpiDeviceId )
{
int Status;
XSpiPs_Config *SpiConfig;
/*
* Initialize the SPI driver so that it's ready to use
*/
SpiConfig = XSpiPs_LookupConfig(SpiDeviceId);
if (NULL == SpiConfig) {
return XST_FAILURE;
}
Status = XSpiPs_CfgInitialize((SpiInstancePtr), SpiConfig,
SpiConfig->BaseAddress);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
Status = XSpiPs_SetOptions(SpiInstancePtr, XSPIPS_MASTER_OPTION | XSPIPS_FORCE_SSELECT_OPTION );
Status = XSpiPs_SetClkPrescaler(SpiInstancePtr, XSPIPS_CLK_PRESCALE_64);
XSpiPs_SetSlaveSelect(SpiInstancePtr, 0x00);
return XST_SUCCESS;
}
void SpiPs_Read(XSpiPs *SpiInstancePtr,u8 *ReadBuffer,int ByteCount)
{
XSpiPs_PolledTransfer(SpiInstancePtr, SendBuf, ReadBuffer,ByteCount);
}
void SpiPs_Send(XSpiPs *SpiInstancePtr,u8 *SendBuffer, int ByteCount)
{
XSpiPs_PolledTransfer(SpiInstancePtr, SendBuffer, ReadBuf,ByteCount);
while (DelayCount++ < 10000) {}
}
int Spi_Ps_Write_Rx(XSpiPs *SpiInstancePtr, unsigned short Addr, char Data)
{
int Status;
u8 SendBuffer[7];
u16 Check_Data_Buf;
u8 Check_Data[2];
SendBuffer[0] = 0x61;
SendBuffer[1] = 0x9e;
SendBuffer[2] = Addr>>8;
SendBuffer[3] = Addr;
SendBuffer[4] = Data;
Check_Data_Buf=SendBuffer[0]+SendBuffer[1]+SendBuffer[2]+SendBuffer[3]+SendBuffer[4];
Check_Data[1]=Check_Data_Buf>>8;
Check_Data[0]=Check_Data_Buf;
SendBuffer[5] = Check_Data[1];
SendBuffer[6] = Check_Data[0];
SpiPs_Send(SpiInstancePtr,SendBuffer,7);
return XST_SUCCESS;
}
int Spi_Ps_Read_Rx(XSpiPs *SpiInstancePtr, unsigned short Addr, u8 *ReadBuffer)
{
u8 SendBuffer[4];
SendBuffer[0] = 0x91;
SendBuffer[1] = 0x6e;
SendBuffer[2] = Addr>>8;
SendBuffer[3] = Addr;
XSpiPs_PolledTransfer(SpiInstancePtr, SendBuffer, ReadBuffer,8);
xil_printf("Addr -- Value = 0x%04x -- 0x%02x \r", Addr,ReadBuffer[5]);
return XST_SUCCESS;
}
int main()
{
SpiPs_Init(&SpiInstance,SPI_DEVICE_ID_RX);
u8 ReadBuf_RX_Temp[8];
Spi_Ps_Write_Rx(&SpiInstance, 0x0662, 0x14);
Spi_Ps_Read_Rx(&SpiInstance, 0x0662, ReadBuf_RX_Temp);
}