请教个问题,新手刚学page write方式写EEPROM时,按官方例程,把所有数据放FIFO然后发送的方式行不通啊,FIFO只有四级深度,数据比较长时会把前面的覆盖掉。
I2caRegs.I2CCNT = msg->NumOfBytes+2;
// Setup data to send
I2caRegs.I2CDXR = msg->MemoryHighAddr;
I2caRegs.I2CDXR = msg->MemoryLowAddr;
// for (i=0; i<msg->NumOfBytes-2; i++)
for (i=0; i<msg->NumOfBytes; i++)
I2caRegs.I2CDXR = msg->MemoryHighAddr;
I2caRegs.I2CDXR = msg->MemoryLowAddr;
// for (i=0; i<msg->NumOfBytes-2; i++)
for (i=0; i<msg->NumOfBytes; i++)
{
I2caRegs.I2CDXR = *(msg->MsgBuffer+i);
}
I2caRegs.I2CDXR = *(msg->MsgBuffer+i);
}
这个例程里面I2caRegs.I2CDXR = *(msg->MsgBuffer+i); 这句话实现不了吧
user5007035:
开启了增强FIFO模式,往BUFFER里写,会通过指针自动填充到FIFO队列把,然后有个判断FIFO队列数据个数的中断,FIFO队列数据少了进中断填充再发,你难道想一次把所有数据都写上吗。。
请教个问题,新手刚学page write方式写EEPROM时,按官方例程,把所有数据放FIFO然后发送的方式行不通啊,FIFO只有四级深度,数据比较长时会把前面的覆盖掉。
I2caRegs.I2CCNT = msg->NumOfBytes+2;
// Setup data to send
I2caRegs.I2CDXR = msg->MemoryHighAddr;
I2caRegs.I2CDXR = msg->MemoryLowAddr;
// for (i=0; i<msg->NumOfBytes-2; i++)
for (i=0; i<msg->NumOfBytes; i++)
I2caRegs.I2CDXR = msg->MemoryHighAddr;
I2caRegs.I2CDXR = msg->MemoryLowAddr;
// for (i=0; i<msg->NumOfBytes-2; i++)
for (i=0; i<msg->NumOfBytes; i++)
{
I2caRegs.I2CDXR = *(msg->MsgBuffer+i);
}
I2caRegs.I2CDXR = *(msg->MsgBuffer+i);
}
这个例程里面I2caRegs.I2CDXR = *(msg->MsgBuffer+i); 这句话实现不了吧
user4675816:
回复 user5007035:
TI的例程,使能了FIFO,但是却是用的I2CINT1A中断。如果XRDY_INT中断也使能,在中断中向发送BUFF填 入数据,FIFO就失效了,每发送一个8 bitXRDY_INT就会触发一次,这种情况下FIFO只有一级深度了,总之就是矛盾的。不知道I2CINT1A和I2CINT2A不知道能不能同时使能。我正在试
TI中文支持网

