这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 【CH582M】CH582M的I2C外设(3)-----从模式

共2条 1/1 1 跳转至页

【CH582M】CH582M的I2C外设(3)-----从模式

专家
2026-09-30 12:08:04     打赏

从模式时,I2C 模块能识别它自己的地址和广播呼叫地址。软件能控制开启或禁止广播呼叫地址的识别。一旦检测到起始事件,I2C 模块将 SDA 的数据通过移位寄存器与自己的地址(位数取决于ENDUAL 和 ADDMODE)或广播地址(ENGC 置位时)相比较,如果不匹配将会忽略,直到产生新的起始事件。如果与头序列相匹配,则会产生一个 ACK 信号并等待第二个字节的地址;如果第二字节的地址也匹配或者 7 位地址情况下全段地址匹配,那么:首先产生一个 ACK 应答;ADDR 位被置位,如果 ITEVTEN位已经置位,那么还会产生相应的中断;如果使用的是双地址模式(ENDUAL 位被置位),还需要读取DUALF 位来判断主机唤起的是哪一个地址。 

从模式默认是接收模式,在接收的头序列的最后一位为 1,或者 7 位地址最后一位为 1 时(取决于第一次接收到头序列还是普通的 7 位地址),I2C 模块将进入到发送器模式,TRA 位将指示当前是接收器还是发送器模式。 

发送模式时,在清除 ADDR 位后,I2C 模块将字节从数据寄存器通过移位寄存器发送到 SDA 线上。在收到一个应答 ACK 后,TxE 位将被置位,如果设置了 ITEVTEN 和 ITBUFEN,还会产生一个中断。如果 TxE 被置位但在下一个数据发送结束前没有新的数据被写入数据寄存器时,BTF 位将被置位。在清除 BTF 前,SCL 将保持低电平,读取状态寄存器 1(R16_I2C_STAR1)后,再向数据寄存器写入数据将会清除 BTF 位。 

接收模式时,在 ADDR 被清除后,I2C 模块将 SDA 上的数据通过移位寄存器存进数据寄存器,在每接收到一个字节后,I2C 模块都会置一个 ACK 位,并置 RxNE 位,如果设置了 ITEVTEN 和 ITBUFEN,还会产生一个中断。如果 RxNE 被置位,且在接收到新的数据前旧的数据没有被读出,那么 BTF 会被置位。在清除 BTF 位之前 SCL 会保持低电平。读取状态寄存器 1(R16_I2C_STAR1)并读取数据寄存器里的数据会清除 BTF 位。 

当 I2C 模块检测到停止事件时,将置 STOPF 位,如果设置了 ITEVFEN 位,还会产生一个中断。用户需要读取状态寄存器(R16_I2C_STAR1)再写控制寄存器(比如复位控制字 SWRST)来清除。 





关键词: CH582M     I2C    

院士
2026-10-03 21:16:09     打赏
2楼

王哥 有时间实践一下I2C的从设备吧!

特别的涨知识 


共2条 1/1 1 跳转至页

回复

匿名不能发帖!请先 [ 登陆 注册 ]