一、【STCAi8051U】主机模式下I2C有关的寄存器说明
ESTAI:从机模式时接收到 START 信号中断允许位
0:禁止从机模式时接收到 START 信号时发生中断
1:使能从机模式时接收到 START 信号时发生中断
ERXI:从机模式时接收到 1 字节数据后中断允许位
0:禁止从机模式时接收到数据后发生中断
1:使能从机模式时接收到 1 字节数据后发生中断
ETXI:从机模式时发送完成 1 字节数据后中断允许位
0:禁止从机模式时发送完成数据后发生中断
1:使能从机模式时发送完成 1 字节数据后发生中断
ESTOI:从机模式时接收到 STOP 信号中断允许位
0:禁止从机模式时接收到 STOP 信号时发生中断
1:使能从机模式时接收到 STOP 信号时发生中断
SLRST:复位从机模式
二、I2C 从机状态寄存器(I2CSLST)
SLBUSY:从机模式时 I2C 控制器状态位(只读位)
0:控制器处于空闲状态
1:控制器处于忙碌状态
当 I2C 控制器处于从机模式时,在空闲状态下,接收到主机发送 START 信号后,控制器会继续检测之后的设备地址数据,若设备地址与当前 I2CSLADR 寄存器中所设置的从机地址像匹配时,控制器便进入到忙碌状态,忙碌状态会一直维持到成功接收到主机发送 STOP 信号,之后状态会再次恢复到空闲状态。
STAIF:从机模式时接收到 START 信号后的中断请求位。从机模式的 I2C 控制器接收到 START 信号后,硬件会自动将此位置 1,并向 CPU 发请求中断,响应中断后 STAIF 位必须用软件清零。STAIF 被置1 的时间点如下图所示:
RXIF:从机模式时接收到 1 字节的数据后的中断请求位。从机模式的 I2C 控制器接收到 1 字节的数据后,在第 8 个时钟的下降沿时硬件会自动将此位置 1,并向 CPU 发请求中断,响应中断后 RXIF 位必须用软件清零。RXIF 被置 1 的时间点如下图所示:
TXIF:从机模式时发送完成 1 字节的数据后的中断请求位。从机模式的 I2C 控制器发送完成 1 字节的数据并成功接收到 1 位 ACK 信号后,在第 9 个时钟的下降沿时硬件会自动将此位置 1,并向 CPU 发请求中断,响应中断后 TXIF 位必须用软件清零。TXIF 被置 1 的时间点如下图所示:
STOIF:从机模式时接收到 STOP 信号后的中断请求位。从机模式的 I2C 控制器接收到 STOP 信号后,硬件会自动将此位置 1,并向 CPU 发请求中断,响应中断后 STOIF 位必须用软件清零。STOIF 被置 1的时间点如下图所示:
SLACKI:从机模式时,接收到的 ACK 数据。
SLACKO:从机模式时,准备将要发送出去的 ACK 信号。
三、I2C 从机地址寄存器(I2CSLADR)
SLADR[6:0]:从机设备地址当 I2C 控制器处于从机模式时,控制器在接收到 START 信号后,会继续检测接下来主机发送出的设备地址数据以及读/写信号。当主机发送出的设备地址与 SLADR[6:0]中所设置的从机设备地址相匹配时,控制器才会向 CPU 发出中断求,请求 CPU 处理 I2C 事件;否则若设备地址不匹配,I2C控制器继续继续监控,等待下一个起始信号,对下一个设备地址继续匹配。
MA:从机设备地址匹配控制
0:设备地址必须与 SLADR[6:0]继续匹配
1:忽略 SLADR 中的设置,匹配所有的设备地址
四、I2C 数据寄存器(I2CTXD,I2CRXD)
I2CTXD 是 I2C 发送数据寄存器,存放将要发送的 I2C 数据
I2CRXD 是 I2C 接收数据寄存器,存放接收完成的 I2C 数据
五、I2C 从机超时控制寄存器(I2CTOCR)
ENTO:I2C 从机超时功能控制位
0:禁止 I2C 从机超时功能
1:使能 I2C 从机超时功能(注:I2C 的主机模式不要使能接收超时功能)
ENTOI:I2C 从机超时中断控制位
0:禁止 I2C 从机超时中断
1:使能 I2C 从机超时中断
SCALE:I2C 超时计数时钟源选择
0:1us 时钟(1MHz 时钟)。(注意:如需要使用此时钟源,用户必须先正确设置 IAP_TPS 寄存器。
例如:若系统时钟为 12MHz,则需要将 IAP_TPS 设置为 12;若系统时钟为 22.1184MHz,则需要将 IAP_TPS 设置为 22;其他频率以此类推。特别注意,此 1us 的时钟并不是精准时间)
1:系统时钟
六、I2C 从机超时状态寄存器(I2CTOSR)
CTOIF:写“1”清除 I2C 超时中断标志位 TOIF。(只写)
TOIF:I2C 超时中断请求标志位。(只读)
当发生 I2C 超时时,TOIF 会被硬件置“1”。如果 ENTOI 为 1 时会产生 I2C 中断,中断入口地址为原 I2C 的中断入口地址。标志位需要软件向 CTOIF 位写“1”清零
七、I2C 从机超时长度控制寄存器(I2CTOTE/H/L)
TM[23:0]:I2C 超时时间控制位。
当 I2C 处于接收空闲状态时,内部超时计数器根据 SCALE 寄存器所选择的时钟源进行计数,当计数时间达到 TM 所设置的超时时间时,便会产生超时中断。当 I2C 接收数据完成时,复位内部超时计数器,重新进行超时计数。
注:
1、如果需要使能接收超时中断功能,则 TM 不可设置为 0,且 I2CTOTL、I2CTOTH、I2CTOTE寄存器的设置必须先设置 I2CTOTL 和 I2CTOTH,最后设置 I2CTOTE
2、必须使能 I2C 为从机模式才有接收超时功能
3、接收超时功能必须在正确接收到一字节数据后才能触发
4、正在接收过程中,无接收超时功能