打印
[牛人杂谈]

原来I2C硬件收发器的各种状态字是关键

[复制链接]
848|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
当总线发送和接收到特定的信号时候,就会在状态寄存器生成相应的状态,判断这些状态位来获取当前总结工作在什么环节。

I2C口是通过以下寄存器控制的:
 I2CON (控制寄存器)
 I2CINTSTS (中断状态寄存器)
 I2CSTATUS (状态寄存器)
 I2DIV (时钟分频寄存器)
 I2CTOUT (超时控制寄存器)
 I2CDAT (数据寄存器)
 I2CSADDRn (地址寄存器, n=0~1), I2CSAMASKn 地址掩码寄存器, n=0~1

 I2CON2(控制寄存器2) 和I2CSTATUS2 (状态寄存器2).

状态寄存器 (I2CSTATUS)
I2CSTATUS是一个8位只读寄存器,I2CSTATUS[7:0]域包含着26种状态码。I2CSTATUS[7:0]为F8H时为无中断请求,其它值对应于I2C的状态。当进入其中任一状态时,就会产生中断请求(INTSTS (I2CINTSTS[0]) = 1)。在INTSTS被硬件置位后一个机器周期,有效状态码出现在I2CSTATUS[7:0] 中。
INTSTS位被软件清0后,状态码仍会存在1个时钟周期。
此外,00H 状态表示总线错误。总线错误发生在START 或STOP 条件出现在帧结构不正确的位置。不正确的位置比如是在串行传输地址字节、数据字节或应答位期间。要从总线错误中恢复I2C,STOP (I2CON[2])必须置位以及必须清除INTSTS (I2CINTSTS[0])以进入无寻址模式。然后清除STOP 用来释放
总线,等待新的通信。当总线错误产生时,I2C 总线不能识别停止条件。




以前看不懂厂家的那个例程种一堆针对状态字的分支操作,现在懂了。

使用特权

评论回复
沙发
呐咯密密| | 2024-6-17 14:25 | 只看该作者
IIC的状态比较多

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

217

主题

3042

帖子

12

粉丝