如图6.13 和图6.14 所示,S3C44B0X IIC 总线接口有4 种操作模式:主传送模式、主接收模式、从传送模式和从接收模式。 这些操作模式的功能关系描述如下。
图6.13 主设备分别在发送和接收模式下的操作
(1)启动和停止条件
当IIC 总线接口未被激活时,一般处于从模式。 也就是说,在检测到SDA 线上的启动条件之前,接口应该处于从模式(当SCL 时钟信号保持高电平时,SDA 线由高电平到低电平的转变产生启动条件)。 当接口状态变为主模式,SDA 线上的数据传送被启动,且SCL 信号产生。
启动条件能够在SDA 线上传送一个字节的连续数据,停止条件能够结束数据的传送。 停止条件:当SCL 是高电平时,SDA 线上由低电平到高电平的转变。 启动和停止条件总是由主设备产生,当启动条件产生时IIC 总线忙,停止条件产生后几个时钟,IIC 总线又变为空闲。
当主设备产生启动条件,它将发送一个从地址通知从设备。 这一个字节的地址包括7 位地址和1 位传送方向指示(读或写)。 如果第8 位是“0”,表明是写操作(发送操作);如果第8位是“1”,表明是读数据(接收操作)。
主设备通过发送一个停止条件完成传送操作。 如果主设备要继续传送数据到总线上,它将产生另一个启动条件和另一个从地址,读/写操作就能以不同的格式进行。
图6.14 从设备分别在发送和接收模式下的操作
(2)数据传送格式
放到SDA 线上的每一个字节长度都应该是8 位,每次传送被发送的字节数没有限制,启动条件后的第一个字节应该有地址域。 当IIC 总线在主模式下操作时,该地址域能被主设备发送。 每一个字节都应该紧跟着一个应答位(ACK),连续数据和地址的MSB 位总是最先被发送。
(3)应答(ACK)信号传送
为了完全完成一个字节的传送,接收器应该发送一个ACK 位给发送器。 ACK 脉冲应该出现在SCL 线的第9 个时钟脉冲上,一个字节数据传送需要8 个时钟,传送ACK 位需要主设备产生一个时钟脉冲。
当接收到ACK 时钟脉冲时,发送器应该通过使SDA 线变成高电平来释放SDA 线。 接收器也需要在ACK 时钟脉冲期间使SDA 线变为低电平,因此,SDA 在第9 个SCL 脉冲的高电平期间可保持低电平。
ACK 位的传送功能能由软件(IICSTAT)激活或禁止。 然而,完成一个字节数据传送操作时,在SCL 第9 个时钟上的ACK 脉冲是必不可少的。
(4)读写操作
在传送模式下,数据被传送后IIC 接口将处于等待状态直到有一个新数据写入IICDS(IIC数据转移寄存器)。 在新的数据写入之前,SCL 线将保持低电平。 新数据写入IICDS 寄存器之后,SCL 线将被释放。 S3C44B0X 保持这个中断,以确定当前数据传送的完成。 CPU 接收到中断请求之后,它将再写一个新的数据到IICDS。(www.xing528.com)
在接收模式下,接收到数据后IIC 接口将处于等待状态直到IICDS 寄存器被读。 在新数据被读出前,SCL 线保持低电平。 在从IICDS 寄存器读出新数据后,SCL 线将被释放。S3C44B0X 保持这个中断,以确定新数据接收的完成。 CPU 接收到中断请求之后,它将从IICDS 中读出这个数据。
(5)总线仲裁程序
仲裁发生在SDA 线上,有效阻止了两个主设备在总线上的争夺。 如果SDA 为高电平的一个主设备检测到另一个主设备的SDA 为低电平,那么它将不能启动数据传送,因为总线的当前电平与它自己的不相符。 仲裁程序将持续到SDA 线变为高电平。
然而,当两个主设备在SDA 线上同时为低电平,每一个主设备应该评估总线控制权是否分配给自己。 为了确认,每个主设备应该测试地址位。 即使每个主设备都产生从地址,也应该测试SDA 线上的地址位,因为一般SDA 线上低电平的保持程度强于高电平的保持程度。例如,一个主设备产生一个低电平作为第一个地址位,而另一个主设备继续保持高电平。 这种情况下,两个主设备都将在总线上检测到低电平,因为低电平强于高电平,即使第一个主设备尽力在总线上保持高电平。 当这种情况发生时,产生低电平(作为地址的第一位)的主设备将得到总线控制权,产生高电平(作为地址的第一位)的主设备应该放弃总线控制权。 如果两个主设备都产生低电平作为地址的第一位,这就需要通过地址的第2 位进行仲裁。
(6)异常中断条件
如果从接收器不能对从地址进行确认,它将保持SDA 线的高电平。 这种情况下,主设备应该产生一个停止条件并终止传送。
如果主设备涉及异常中断中,在从设备接收到最后一个数据字节后,主设备将通过取消一个ACK 信号的产生来通知从设备传送操作的结束,然后从发送器释放SDA,允许主设备产生一个停止条件。
(7)配置IIC 总线
为了控制连续时钟(SCL)的频率,4 位预分频器值可在IICCON 寄存器内设置。 IIC 接口地址存储在IIC 地址寄存器IICADD(缺省时IIC 地址是一个未知值)。
(8)每种模式下操作的流程图
以下步骤必须在任何IIC tx/rx 操作之前执行。
①如果需要的话在IICADD 寄存器写入从地址。
②设置IICCON 寄存器。
a.使能中断。
b.定义SCL 周期。
③设置IICSTAT 来使能连续输出。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。