AXI iic使用
本文主要讲述zynq的iic使用,iic作为主站使用,作为从站的本文不适合。
Iic的接口在PL端。(iic的接口在ps端的情况下,不适合本文)
如果iic的接口在ps端,请看:https://blog.csdn.net/weixin_36590806/article/details/111485711
转载:https://blog.csdn.net/weixin_36590806/article/details/112850810
使用软件版本:vivado2018.3
先说下PL端的设置吧:
然后设置地址啥的,就不多说了。
开始zynq端的编程了:
貌似不需要初始化的,我的没有经过初始化就可以使用的,可能是因为只当作主站的原因吧。
接下来就是写函数:
unsigned iic_write(unsigned char iic_base,unsigned char Address, unsigned char *BufferPtr, int ByteCount)
{
volatile unsigned SentByteCount;
volatile unsigned AckByteCount;
u8 WriteBuffer[sizeof(Address) + 16];
int Index;
u32 CntlReg;
char IicAddr;
for (Index = 0; Index < ByteCount; Index++) {
WriteBuffer[sizeof(Address) + Index] = BufferPtr[Index];
}
SentByteCount = XIic_Send(IIC_BASE_ADDRESS, IicAddr,
WriteBuffer, sizeof(Address) + ByteCount,
XIIC_STOP);
return SentByteCount - sizeof(Address);
}
说明下函数的内容:
iic_base:iic的地址,这个可以看原理图,就知道iic的地址
Address:准备写iic的寄存器地址
*BufferPtr:写iic的数据内容
ByteCount:写iic的数据长度
IIC_BASE_ADDRESS:就是这个iic的地址,这个可以从#include "xparameters.h"里面看到。
然后就是读函数了:
unsigned iic_read(unsigned char iic_base,unsigned char Address, unsigned char *BufferPtr, int ByteCount)
{
volatile unsigned ReceivedByteCount;
u16 StatusReg;
u32 CntlReg;
do {
StatusReg = XIic_ReadReg(IIC_BASE_ADDRESS, XIIC_SR_REG_OFFSET);
if(!(StatusReg & XIIC_SR_BUS_BUSY_MASK)) {
ReceivedByteCount = XIic_Send(IIC_BASE_ADDRESS,
iic_base,
(u8 *)&Address,
sizeof(Address),
XIIC_STOP);
if (ReceivedByteCount != sizeof(Address)) {
CntlReg = XIic_ReadReg(IIC_BASE_ADDRESS,
XIIC_CR_REG_OFFSET);
XIic_WriteReg(IIC0_BASE_ADDRESS, XIIC_CR_REG_OFFSET,
CntlReg | XIIC_CR_TX_FIFO_RESET_MASK);
XIic_WriteReg(IIC0_BASE_ADDRESS,
XIIC_CR_REG_OFFSET,
XIIC_CR_ENABLE_DEVICE_MASK);
}
}
} while (ReceivedByteCount != sizeof(Address));/* Send is aborted so reset Tx FIFO */
ReceivedByteCount = XIic_Recv(IIC_BASE_ADDRESS, iic_base,
BufferPtr, ByteCount, XIIC_STOP);
return ReceivedByteCount;
}
说明下函数的内容:
iic_base:iic的地址,这个可以看原理图,就知道iic的地址
Address:准备读iic的寄存器地址
*BufferPtr:读到iic的数据内容。
ByteCount:读iic的数据长度
以上就是pl端iic的使用了,这样就可以愉快的使用了。嘻嘻嘻。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix