zynq spi-emio的使用方法

本文详细介绍了在Zynq中配置SPI接口,包括引脚设置,如AC11、M8等,并展示了如何使用Vitis中的XSpiPs库进行SPI设备的初始化、发送和接收操作。主要涉及了SPI驱动程序的创建和基本数据传输函数的调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值