I2C通信中自动与软件控制的时钟延长机制

需积分: 7 37 下载量 3 浏览量 更新于2024-08-10 收藏 3.37MB PDF 举报
"自动时钟延长-chroma language_manual" 在I2C通信中,自动时钟延长是一种关键功能,尤其在dsPIC30F系列微控制器中。这一特性允许从设备根据需要延长SCL(时钟)线的低电平状态,以确保数据传输的正确同步。17.5章节详细介绍了这个机制。 17.5.1 发送时钟延长: 在10位和7位发送模式下,如果TBF(传输缓冲区空)位为0,表示缓冲区为空,系统会在第9个时钟的下降沿后自动清零SCLREL位,从而延长时钟。在从设备发送模式下,无论STREN(时钟强度)位设置如何,都会进行时钟延长。一旦SCLREL被清零,SCL线会被拉低。用户中断服务程序需要在继续发送前将SCLREL设回1,以便有时间处理新的数据。 17.5.2 接收时钟延长: 在从接收模式下,STREN位决定是否启用时钟延长。如果STREN设为1,SCL线会在每次数据接收序列结束后保持低电平。对于7位和10位寻址模式,延长SCL的方法相同。当接收缓冲区满(RBF位为1)且在第9个时钟的下降沿后,SCLREL会自动清零,强制SCL保持低电平。中断服务程序需要将SCLREL设回1以防止数据丢失。 17.5.3 7位寻址时的时钟延长(STREN = 1): 在7位寻址模式下,如果STREN置1,SCL线会在缓冲区满时保持低电平。第9个时钟的下降沿后,如果RBF位为1,SCLREL将被清零,SCL线保持低电平,允许用户有时间读取I2CRCV内容,防止缓冲区溢出。 17.5.4 10位寻址时的时钟延长(STREN = 1): 10位寻址时,时钟延长也会自动进行。寻址过程结束后,后续的数据接收或发送序列会按照之前的方式进行时钟延长。 17.6 软件控制的时钟延长(STREN = 1): 当STREN位设为1时,通过软件清零SCLREL可以实现对时钟延长的软件控制。SCLREL的写操作会与SCL时钟同步。清零SCLREL不会立即拉低SCL输出,而是等待检测到SCL的下降沿且采样到SCL为低电平时才会执行。SCL输出会保持低电平直到SCLREL被重新置1,且I2C总线上所有其他设备都释放了SCL。这样做是为了满足SCL最小高电平时间的要求。 需要注意的是,如果在第9个时钟下降沿前设置了TBF位,或者在RBF位清零前就完成了读取操作,SCLREL将不会被自动清零,也不会进行时钟延长。而不论TBF或RBF位状态如何,SCLREL都可以通过软件设置为1。 总结来说,自动时钟延长是dsPIC30F系列微控制器在I2C通信中确保数据完整性和同步的重要机制。它允许设备根据需要扩展时钟周期,以便有足够的时间处理数据或响应。用户可以通过配置STREN位以及适时地读写SCLREL位来控制这个功能,以适应不同的应用需求。