画了Example_2803xI2C_eeprom例程的状态机图,大家看看对不对
绿色是In message,黄色是Out message
例程使能了发送和接收FIFO,发送数据部分有如下语句:
// Setup data to send
I2caRegs.I2CDXR = msg->MemoryHighAddr;
I2caRegs.I2CDXR = msg->MemoryLowAddr;
// for (i=0; i<msg->NumOfBytes-2; i++)
{
I2caRegs.I2CDXR = *(msg->MsgBuffer+i);
}
即连续对I2CDDXR寄存器进行4次写操作
请问使能发送FIFO以后,这样的连续写操作是把数据放到FIFO里面了吗?
接收过程是不是也是先进到FIFO里面呢?
user78960159:请大家帮忙看下我的理解对不对
画了Example_2803xI2C_eeprom例程的状态机图,大家看看对不对
绿色是In message,黄色是Out message
例程使能了发送和接收FIFO,发送数据部分有如下语句:
// Setup data to send
I2caRegs.I2CDXR = msg->MemoryHighAddr;
I2caRegs.I2CDXR = msg->MemoryLowAddr;
// for (i=0; i<msg->NumOfBytes-2; i++)
{
I2caRegs.I2CDXR = *(msg->MsgBuffer+i);
}
即连续对I2CDDXR寄存器进行4次写操作
请问使能发送FIFO以后,这样的连续写操作是把数据放到FIFO里面了吗?
接收过程是不是也是先进到FIFO里面呢?
user5860441:看了两天,终于搞懂了心中的疑问。
1、利用IIC外设,在配置I2CMDR之前的设置都是向外设寄存器写数据,准备好,当配置了I2CMDR之后,外设开始工作,也就是读、写函数每次都是连续执行完,并更新了当前消息指针和状态。
2、AT24C1024的Word address有17bit包括P0和2 bytes的address。512页,每页256自己。前面9bits表示页地址,后面8bits表示页内字节地址,它会在每次读写一字节数据时,自动加1,遇到页尾,回到0,重新开始。
不同的EEPROM的Word address的位数不一样,造成容量不一样,有的只有8位,一次就可以把Word address写完,有的要分两次写,(多于16位的P0,和器件地址一起写的)
3、给的例程,并不通用,不同EEPORM,要做小修改。例程中利用了FIFO,但只有4级深度,连续读写多字节,也要修改程序。
画了Example_2803xI2C_eeprom例程的状态机图,大家看看对不对
绿色是In message,黄色是Out message
例程使能了发送和接收FIFO,发送数据部分有如下语句:
// Setup data to send
I2caRegs.I2CDXR = msg->MemoryHighAddr;
I2caRegs.I2CDXR = msg->MemoryLowAddr;
// for (i=0; i<msg->NumOfBytes-2; i++)
{
I2caRegs.I2CDXR = *(msg->MsgBuffer+i);
}
即连续对I2CDDXR寄存器进行4次写操作
请问使能发送FIFO以后,这样的连续写操作是把数据放到FIFO里面了吗?
接收过程是不是也是先进到FIFO里面呢?
user5860441:
回复 user5860441:
例程写的不完整,比如写数据时和读数据的第二步,如果没有收到应答位,该怎么办,程序中没有。