CoolRunner-Ⅱ器件的I2C接口主状态机
如图 I2C接口主状态机
无论是主模式,还是从模式,状态机都是相同的。在每个状态,模式都会被检测,以决定输出和下一个状态。如果仲裁失败或 I2C控制器被确定为从模式,控制器会自动由主模式切换到从模式。
此状态机用到一个位计数器和两个移位寄存器,位计数器对从总线上接收到的位进行计数,其中一个移位寄存器用来存储I2C的HEADER;另一个用来存储接收到的数据或待发送的数据。
当检测到START信号时,状态机进入HEADER状态。在HEADER状态,如果是主模式,MBDR寄存器中的HEADER被发送。当所有8位数据发送完毕时,状态机转入ACK HEADER。
在ACK_HEADER状态,如果CoolRunner-II I2C控制器工作在主模式,将会采样SDA,以确认从设备是否有应答。如果没有应答,状态转入STOP;如果有应答,LSB=1时进入RCV_DATA, LSB=0时进入XMIT_DATA。
I2C Header移位寄存器与MADR进行比较,如果匹配,则CoolRunner-II I2C为被寻址的从设备。模式立刻切换到从模式,状态寄存器MBSR中MAAS位被置位,SDA线将会按照TXAK中的设置应答当前主设备。
在RCV_DAT状态,SDA数据被入I2C移位寄存器,以供uC读取。当所有数据位被接收到,状态机转入ACK_DATA,TXAK被输出到SDA。
在XMIT_DATA状态,MBDR寄存器中数据被送到SDA.当发送整的字节后,状态转入WAIT_ACK.如果检测到ACK,则状态再次进入XMIT_DATA,直到产生STOP条件或没有收到ACK条件.必须注意提,在数据传输过程中uC速率必须跟上I2C控制器收发数据的速率.如果中断使能,则当一个字节的数据发送或接由结束时就会产生一个中断,MCF位将会被置位.在ACK状态,数据在uC和控制器之间转输。在此过程中,I2C控制器不会等待uC操作。
如果Coo1Runner-ⅡI2C工作在主模式,在STOP状态告知SCL/START/STOP发生器产生一个STOP条件,最后状态进入IDLE。
CoolRunner-Ⅱ I2C接口 主状态机 相关文章:
- CoolRunner-Ⅱ器件的微处理器接口逻辑(12-22)
- I2C接口进入busy状态不能退出(12-13)
- AVR单片机硬件I2C接口驱动程序(11-17)
- LPC23xx通过I2C接口读写AT24C64(11-10)
- I2C之知(六)--s3c2440用I2C接口访问EEPROM(11-09)
- Coo1Runner-Ⅱ器件I2C接口协议(12-22)