首页 理论教育 IIC模块详解+单片机与嵌入式系统实践

IIC模块详解+单片机与嵌入式系统实践

时间:2023-11-19 理论教育 版权反馈
【摘要】:用户首先通过设置IIC控制寄存器中的TX位为l来进行数据的发送;其次用户设置IIC控制寄存器中的MST位为1,此时IIC模块将在IIC总线上产生一个START信号。当在传送完一个字节后,IIC模块会设置IIC中断标志位为1;若使用IIC中断,则在中断服务子程序中需要将中断标志清零,如果还需继续通信,还需检查从设备是否对字节进行了确认。

IIC模块详解+单片机与嵌入式系统实践

1.MCU作为主设备

当MCU作为主设备时,通信就由MCU发起。用户首先通过设置IIC控制寄存器中的TX位为l来进行数据的发送;其次用户设置IIC控制寄存器中的MST位为1,此时IIC模块将在IIC总线上产生一个START信号。随后用户将期望的从设备地址写入到IIC数据寄存器的高7位,将期望的数据传送方向位(读从设备则LSB=1,写从设备则LSB=0)写入到IIC数据寄存器的最低位。当在传送完一个字节后,IIC模块会设置IIC中断标志位为1;若使用IIC中断,则在中断服务子程序中需要将中断标志清零,如果还需继续通信,还需检查从设备是否对字节进行了确认(Acknowledge)。

若MCU初始化为主设备之后,MCU要从其他从设备读取数据,那么IIC控制寄存器中的TX位需要被清零,以允许从设备接收数据。然后执行一个读IIC数据寄存器的空操作,以便在IIC总线上产生一个由从设备读取第一个数据字节到IIC数据寄存器所需的SCL信号。接着在接收到字节后,如果IIC控制寄存器中的TXAK位为0,则IIC模块自动产生一个针对此字节的确认(Acknowledge)位,之后,IIC中断标志位变为1。此时读IIC数据寄存器会计时到下一个字节,当最后一个字节的读取时不需要被确认(Acknowledge),为了告知从设备读操作已经结束,需要在读IIC数据寄存器之前把IIC控制寄存器中的TXAK位置1。最后将控制寄存器中的MST清零产生一个STOP信号。

2.MCU作为从设备(www.xing528.com)

MCU作为从设备时,当检测到呼叫地址和器件自身的IIC地址(即IIC1A寄存器中的值)相同时,IIC状态寄存器IIC1S中的中断标志位IIC1F会变为1。如果收到第一个字节是个地址信息,字节的最低位LSB指示了主设备是想读还是写该器件,IIC控制寄存器中的TX位需要相应的变为1或0,以使Tx的取值和由IIC状态寄存器中SRW位所指定的期望通信方向相一致。

如果是器件从主设备读取数据,则需要读IIC数据寄存器来释放SCL线,以便主设备能够发送下一个字节。如果是器件发送数据到主设备,需要写下一个字节到IIC数据寄存器来释放SCL线,以便主设备能够读取下一个字节。每一次字节的发送或接收结束,都会产生一次IIC中断,在中断服务子程序需要将中断标志清零,通信过程将继续进行。当主设备在总线上产生了一个STOP信号的时候,通信结束。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈