不枉初心,砥砺前行

皮皮祥的博客

欢迎留言,评论

导航

XIicPs_MasterSendPolled和XIicPs_MasterRecvPolled

Xilinx FPGA的IIC程序中的XIicPs_MasterSendPolled和XIicPs_MasterRecvPolled函数的使用,8位寄存器地址写入24位数据

硬件平台:黑金AX7010开发板
vivado版本:Vivado 2017.4
SDK平台:SDK 2017.4
目的:利用FPGA通过PS端EMIO的IIC配置图像传感器,该寄存器是8位寄存器地址写入24位数据

如何知道XIicPs_MasterSendPolled和XIicPs_MasterRecvPolled函数的使用方法(参数说明)

1、在BSP文件下有很多BSP文件,找到iicps_v3_5文件,点击(要使BSP文件中包含iicps_v3_5文件,必须先在vivado中配置了IIC,使能IIC后BSP会自动加载iicps_v3_5文件)
在这里插入图片描述
2、点击后,会自动跳转到文档介绍页面
在这里插入图片描述
3、在SDK中,通过函数间的跳转,可以发现XIicPs_MasterSendPolled函数就是在xiicps_master.c中被定义的
在这里插入图片描述
4、如下所示,在网页中就可以找到XIicPs_MasterSendPolled函数相关的介绍了
在这里插入图片描述
5、如下图所示,就能看到XIicPs_MasterSendPolled函数的作用,参数配置,各个参数的作用,以及各个参数的含义,在这里插入图片描述
例如这里XIicPs_MasterSendPolled函数的参数中:
InstancePtr是指的是XIicPs例化的时候指向的IIC的指针,就是PS端的IIC端口的地址,一般是&ps_i2c0之类的
MsgPtr是发送数据时存储的缓存变量
ByteCount是你想发送的字节数
SlaveAddr是设备的地址
在这里插入图片描述
这样调用即可
同理:XIicPs_MasterRecvPolled函数的使用也可以按这样进行

如何往传感器的8位寄存器地址写入24位数据

给出我所写的往传感器的8位寄存器地址写入24位数据的代码

int i2c_reg8_write24(XIicPs *InstancePtr, char IIC_ADDR, char Addr, u32 Data)
{
	int Status;
	u8 SendBuffer[4];

	SendBuffer[0] = Addr;
	SendBuffer[1] = Data;
	SendBuffer[2] = Data>>8;
	SendBuffer[3] = Data>>16;
	xil_printf("SendBuffer[0]=0x%02x\r\n", SendBuffer[0]);
	xil_printf("SendBuffer[1]=0x%02x\r\n", SendBuffer[1]);
	xil_printf("SendBuffer[2]=0x%02x\r\n", SendBuffer[2]);
	xil_printf("SendBuffer[3]=0x%02x\r\n", SendBuffer[3]);

	Status = XIicPs_MasterSendPolled(InstancePtr, SendBuffer,4, IIC_ADDR);
	while (XIicPs_BusIsBusy(InstancePtr));  //等待接口写入完成

	return Status;
}

给出我所写的向传感器的8位寄存器地址读出24位数据的代码

char i2c_reg8_read24(XIicPs *InstancePtr, char IIC_ADDR, char Addr)
{
	u8 wr_data;
	u8 rd_data[3];

	wr_data = Addr;

	XIicPs_MasterSendPolled(InstancePtr, &wr_data, 1, IIC_ADDR);
	while (XIicPs_BusIsBusy(InstancePtr));
	XIicPs_MasterRecvPolled(InstancePtr, rd_data, 3, IIC_ADDR);
	while (XIicPs_BusIsBusy(InstancePtr));

    for (int i = 0; i < 3; i++)
    	{
    	xil_printf("rd_data=0x%02x\r\n", rd_data[i]);
    	}

	return rd_data[3];
}

上面有很多xil_printf,目的就是可以输出到串口上,直观的验证我写入是否正确,亲测可以实现8位寄存器地址写入24位数据。

posted on 2022-11-15 11:34  皮皮祥  阅读(409)  评论(0编辑  收藏  举报