PIC系列-I2C通讯模块
1、PIC32参考资源
PIC32系列参考手册 中文版 链接地址:PIC32系列参考手册 第24章 I2C模块
2、IIC通讯简介
I2C模块是用于同其他外设或单片机器件进行通信的串行接口。可在以下任意 I2C系统中工作:
• 作为从器件
• 在单主机系统中作为主器件 (从器件也可同时工作)
• 在多主机系统中作为主 / 从器件 (提供总线冲突检测和仲裁)
相互独立的I2C主器件逻辑和I2C从器件逻辑,它们根据各自的事件产生中断。
I2C模块具有以下主要特性:
• 主器件和从器件逻辑相互独立
• 支持多主机系统,可以防止在仲裁时丢失报文
• 在从模式下可检测 7 位和 10 位器件地址,并可配置地址掩码
• 检测I2C协议中定义的广播呼叫地址
• 具有自动 SCLx 时钟延长功能,为处理器提供延时以响应从器件的数据请求
• 支持 100 kHz 和 400 kHz 总线规范
• 支持严格I2C保留地址规则
3、控制和状态寄存器
PIC32MX I2C模块包含以下特殊功能寄存器
• I2CxCON:I2C模块控制寄存器
• I2CxSTAT:I2C模块状态寄存器
• I2CxMSK :地址掩码寄存器(指定 I2CxADD 中的哪些位可以忽略,从而提供了多地址支持)
• I2CxRCV:接收缓冲寄存器 (只读)
• I2CxTRN:发送寄存器 (读 / 写)
• I2CxADD:地址寄存器 (保存从器件地址)
• I2CxBRG:波特率发生器重载寄存器(保存I2C模块波特率发生器的波特率发生器重载值)
每个 I 2 C 模块还具有以下用于中断控制的相关位:
• I2CxMIF:主器件中断标志状态位 (在 IFC0 和 IFC1 INT 寄存器中)
• I2CxSIF:从器件中断标志状态位 (在 IFS0 和 IFS1 INT 寄存器中)
• I2CxBIF:总线冲突中断标志状态位 (在 IFS0 和 IFS1 INT 寄存器中)
• I2CxMIE:主器件中断允许控制位 (在 IEC0 和 IEC1 INT 寄存器中)
• I2CxSIE:从器件中断允许控制位 (在 IEC0 和 IEC1 INT 寄存器中)
• I2CxBIE:总线冲突中断允许控制位 (在 IEC0 和 IEC1 INT 寄存器中)
• I2CxIP<2:0>:中断优先级控制位 (在 IPC6 和 IPC8 INT 寄存器中)
• I2CxIS<1:0>:中断子优先级控制位 (在 IPC6 和 IPC8 INT 寄存器中)
I2CXCON :I2C控制寄存器
bit 15 ON:I2C使能位
1 = 使能 I2C模块,并将 SDA 和 SCL 引脚配置为串口引脚
0 = 禁止 I 2 C 模块;所有 I 2 C 引脚由端口功能控制
注: 使用 1:1 PBCLK 分频比时,在清零模块 ON 位的指令之后,用户的软件不应立即在 SYSCLK周期中读 / 写外设的 SFR。
bit 14 FRZ :DEBUG(调试)模式冻结控制位(仅在 DEBUG(调试)模式下可读 / 写;其他情况下读为 0)
1 = 处于DEBUG(调试)模式时模块停止工作
0 = 处于DEBUG(调试)模式时模块不停止工作
注: FRZ 仅在调试异常模式下可写,在正常模式下强制为 0。
bit 13 SIDL :IDLE (空闲)模式停止位
1 = 当器件进入 IDLE (空闲)模式时,模块停止工作
0 = 在 IDLE (空闲)模式下模块继续工作
bit 12 SCLREL:SCL 释放控制位 仅适用于 I 2 C 从模式,模块复位和 (ON = 0)会设置 SCLREL = 1
如果 STREN = 0:
1 = 释放时钟
0 = 保持时钟为低电平 (时钟延长)
注: 在从器件发送开始时自动清零。
如果 STREN = 1:
1 = 释放时钟
0 = 保持时钟为低电平(时钟延长)。用户可以将该位设定为 0,强制在下一次 SCL 低电平时产生时钟延长。
注: 在从器件发送开始时自动清零;在从器件接收结束时自动清零。
bit 11 STRICT :严格 I 2 C 保留地址规则使能位
1 = 强制实行严格保留寻址规则。器件不响应保留地址空间或产生处于保留地址空间中的地址。
0 = 不使能严格 I 2 C 保留地址规则
bit 10 A10M :10 位从器件地址标志位
1 = I2CxADD 为 10 位从器件地址
0 = I2CxADD 为 7 位从器件地址
bit 9 DISSLW :压摆率控制禁止位
1 = 标准速度模式下禁止压摆率控制 (100 kHz); 1 MHz 模式下也禁止
0 = 高速模式下使能压摆率控制 (400 kHz)
bit 8 SMEN :SMBus 输入电平禁止位
1 = 使能输入逻辑以使门限值符合 SMBus 规范
0 = 禁止 SMBus 特定输入
bit 7 GCEN :广播呼叫使能位,仅适用于 I 2 C 从模式
1 = 允许在 I2CSR 中接收到广播呼叫地址时产生中断。已使能模块接收。
0 = 禁止广播呼叫地址
bit 6 STREN :SCL 时钟延长使能位,仅适用于 I 2 C 从模式;与 SCLREL 位配合使用。
1 = 使能时钟延长
0 = 禁止时钟延长
bit 5 ACKDT :应答数据位
仅适用于I 2 C主模式;适用于主模式接收期间。当用户在接收结束时发出一个应答序列时将发送的值。
1 = 发送 NACK
0 = 发送 ACK
bit 4 ACKEN :应答序列使能位,仅适用于 I 2 C 主模式;适用于主模式接收期间
1 = 在 SDA 和 SCL 引脚上发出应答序列,并发送 ACKDT数据位;由模块清零
0 = 应答序列空闲
bit 3 RCEN :接收使能位,仅适用于 I 2 C 主模式
1 = 使能 I 2 C 接收模式,在接收完 8 位数据字节时由模块自动清零
0 = 接收序列不在进行中
bit 2 PEN :停止条件使能位,仅适用于 I 2 C 主模式
1 = 在 SDA 和 SCL 引脚上发出停止条件;由模块清零
0 = 停止条件空闲
bit 1 RSEN :重复启动条件使能位,仅适用于 I 2 C 主模式
1 = 在 SDA 和 SCL 引脚上发出重复启动条件;由模块清零
0 = 重复启动条件空闲
bit 0 SEN :启动条件使能位,仅适用于 I 2 C 主模式
1 = 在 SDA 和 SCL 引脚上发出启动条件;由模块清零
0 = 启动条件空闲
I2CXSTAT:I2C状态寄存器
bit 15 ACKSTAT :应答状态位
适用于 I 2 C 主模式和从模式;适用于发送和接收操作。
1 = 未接收到应答
0 = 接收到应答
bit 14 TRSTAT :发送状态位
仅适用于 I 2 C 主模式;适用于主发送模式。
1 = 主器件正在进行发送 (8 位 + ACK)
0 = 主器件不在进行发送
bit 13-11 保留:写入 0 ;忽略读操作
bit 10 BCL :主器件总线冲突检测位
当 I 2 C 模块被禁止 (ON = 0)时清零。
1 = 主器件工作期间检测到总线冲突
0 = 未检测到冲突
bit 9 GCSTAT :广播呼叫状态位,在检测到停止条件之后清零。
1 = 接收到广播呼叫地址
0 = 未接收到广播呼叫地址
bit 8 ADD10:10 位地址状态位,在检测到停止条件之后清零。
1 = 10 位地址匹配
0 = 10 位地址不匹配
bit 7 IWCOL :写冲突检测位
1 = 因为 I 2 C 模块忙,尝试写 I2CxTRN 寄存器失败。必须用软件清零。
0 = 未发生冲突
bit 6 I2COV :I 2 C 接收溢出状态位
1 = 当 I2CxRCV 寄存器仍然保存原先字节的情况下接收到了新字节。在发送模式下 I2COV 为 “无关位”。必须用软件清零。
0 = 未溢出
bit 5 D/A :数据 / 地址位,仅对从模式操作有效。
1 = 指示上次接收或发送的字节为数据
0 = 指示上次接收或发送的字节为地址
bit 4 P :停止位
当检测到启动、重复启动或停止条件时更新;当 I 2 C 模块被禁止 (ON = 0)时清零。
1 = 指示上次检测到停止位
0 = 上次未检测到停止位
bit 3 S :启动位
当检测到启动、重复启动或停止条件时更新;当 I 2 C 模块被禁止 (ON = 0)时清零。
1 = 指示上次检测到启动 (或重复启动)位
0 = 上次未检测到启动位
bit 2 R/W :读 / 写信息位,仅对从模式操作有效。
1 = 读——指示数据传输自从器件输出
0 = 写——指示数据传输输入到从器件
bit 1 RBF : 接收缓冲区满状态位
1 = 接收完成; I2CxRCV 为满
0 = 接收未完成; I2CxRCV 为空
bit 0 TBF : 发送缓冲区满状态位
1 = 发送正在进行中; I2CxTRN 为满 (8 位数据)
0 = 发送完成; I2CxTRN 为空
I2CXADD :I 2 C 从器件地址寄存器
bit 9-0 ADD<9:0> :I 2 C 从器件地址位,主模式或从模式
I2CXMSK :I 2 C 地址掩码寄存器
bit 9-0 MSK<9:0> :I 2 C 地址掩码位
1 = 将传入地址匹配序列中的特定位单元强制设为 “无关位”。
0 = 地址位单元必须与传入的 I 2 C 地址匹配序列匹配。