CoolRunner-Ⅱ器件的I2C接口主状态机
发布时间:2008/9/19 0:00:00 访问次数:685
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。
欢迎转载,信息来自维库电子市场网(www.dzsc.com)
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。
欢迎转载,信息来自维库电子市场网(www.dzsc.com)