12、PIC系列-I2C通讯模块

本文详细介绍了PIC32系列MCU的I2C通信模块,包括I2C的基本概念、控制和状态寄存器、总线协议,以及如何使用Microchip的Harmony框架生成和分析I2C工程代码。文中还提供了实验验证步骤,展示了如何在实际应用中读写EEPROM并验证数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PIC系列-I2C通讯模块

1、PIC32参考资源

2、IIC通讯简介

3、控制和状态寄存器

4、I2C总线协议

5、用Harmony生成I2C工程代码

6、实际代码分析

7、实验验证


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 地址匹配序列匹配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huangtop

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值