| 这个就是状态寄存器,状态一旦发生改变,就会发生I2C中断,然后读该寄存器就知道发生了何事。 
 下图就是I2C作为Master和Slave时各个状态的含义表格:  0xF8是总线空闲的状态值,也是STATUS寄存器的缺省值。  下面详细介绍一下上表的各个状态。  Master状态介绍:  1)      发送 START 信号成功,发生 I2C 中断,STATUS 寄存器的值=0x08  2)      作为 I2C Master 没有发送 STOP 又发送 START 信号成功,发生 I2C 中断,STATUS 寄存器的值=0x10  3)      发送地址+W 成功并收到 ACK,发生 I2C 中断,STATUS 寄存器的值=0x18  4)      发送地址+W 成功并收到 NACK,发生 I2C 中断,STATUS 寄存器的值=0x20  5)      发送数据成功并收到 ACK,发生 I2C 中断,STATUS 寄存器的值=0x28  6)      发送数据成功并收到 NACK,发生 I2C 中断,STATUS 寄存器的值=0x30  7)      Master发生仲裁失败,发生 I2C中断,STATUS寄存器的值=0x38 8)      发送地址+R 成功并收到 ACK,发生 I2C 中断,STATUS 寄存器的值=0x40  9)      发送地址+R 成功并收到 NACK,发生 I2C 中断,STATUS 寄存器的值=0x48  10)   收到数据并返回 ACK,发生 I2C 中断,STATUS 寄存器的值=0x50  11)   收到数据并返回 NACK,发生 I2C 中断,STATUS 寄存器的值=0x58  12)   总线错误,发生 I2C 中断,STATUS 寄存器的值=0x00  Slave状态介绍:  1)      收到 RE-START 信号或者 STOP 信号,发生 I2C 中断,STATUS 寄存器的值=0xA0  2)      收到 SLA+R 信号并返回 ACK,发生 I2C 中断,STATUS 寄存器的值=0xA8  3)      作为 Master 仲裁失败 HW 会自动转为 Slave,之后收到 SLA+R 信号,发生 I2C 中断, STATUS 寄存器的值=0xB0  4)      发送数据并收到 ACK,发生 I2C 中断,STATUS 寄存器的值=0xB8  5)      发送数据并收到 NACK,发生 I2C 中断,STATUS 寄存器的值=0xC0  6)      从接发送最后一个数据,但是居然收到的是 ACK,发生 I2C 中断,STATUS 寄存器的值 =0xC8  7)      从接收到 SLA+W 并返回 ACK,发生 I2C 中断,STATUS 寄存器的值=0x60  8)      作为 Master 仲裁失败 HW 会自动转为 Slave,之后收到 SLA+W 信号,发生 I2C 中断, STATUS 寄存器的值=0x68  9)      收到数据并返回 ACK,发生 I2C 中断,STATUS 寄存器的值=0x80  10)   收到数据并返回 NACK,发生 I2C 中断,STATUS 寄存器的值=0x88  11)   广播模式收到 SLA+W 并返回 ACK,发生 I2C 中断,STATUS 寄存器的值=0x70  12)   广播模式仲裁失败,发生 I2C中断,STATUS寄存器的值=0x78 
 13)   广播模式收到数据并返回 ACK,发生 I2C 中断,STATUS 寄存器的值=0x90  
 |