zynq系列之-----PS端iic使用
本文主要讲述zynq的iic使用。此IIC只能作为主站,作为从站的不适合本文。
Iic的接口在ps端。(iic的接口在pl端的情况下,不适合本文)
使用软件版本:vivado2018.3
pl端设置:
转载:xilinx平台中zynq的PS端iic使用_hhh_fpga的博客-CSDN博客_zynq 模拟iic
欢迎转载!
ps端:
1、初始化操作:
2、写操作
使用函数“XIicPs_MasterSendPolled(&Iic, senddata, len, addr)”
定义一个u8 senddata[6];
senddata[0] = reg; 寄存器地址
senddata[1] = val; 数据内容
&lic:设备地址,
senddata:寄存器地址和写内容
len:写入数据的长度
addr:是iic器件地址。
3、读操作
XIicPs_MasterRecvPolled(&Iic, val, len, addr);
&lic:设备地址,
Val: 读取的数据内容
len:读取数据的长度
addr:是iic器件地址。
对于读函数,需要在注意的地方在于需要根据实际设备的读时序进行封装,直接调用这个函数可能不会成功。
在这个时序中可以看出,我们是先发送一个写动作,但没有实际数据写入,然后在发送一个读指令。在sdk中写函数和读函数是分开的,所以我们在读取数据时,可能跟我们在使用模拟iic操作的时候不太一样。
unsigned char IIC_read_reg(unsigned char address, unsigned char reg)
{
unsigned char val;
int Status;
unsigned char senddata[6];
senddata[0] = reg;
Status = XIicPs_MasterSendPolled(&Iic, senddata, 1, address);
if (Status != XST_SUCCESS)
{
printf("IIC Master integerReg Wirte Failed\r\n");
return XST_FAILURE;
}
while(XIicPs_BusIsBusy(&Iic));
Status = (si0_iic_read(&val,2,address));
if (Status != XST_SUCCESS)
{
printf("IIC Master integerReg Read Failed\r\n");
return XST_FAILURE;
}
return (val);
}
嘻嘻嘻。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具