HC32F460 IIC访问总结

news/2025/1/16 1:53:03/

I²C 总线由一根时钟线( SCL),一根数据线( SDA)构成。所有的连接器件必须是漏
极开路输出。 SCL, SDA 线外接上拉电阻。电阻阻值取决于系统应用。
通常情况下,一个完整的通信过程包括下列 4 部分:
1. 开始条件
2. 地址传送
3. 数据传送
4. 停止条件

1,iic 的初始化过程:

在开始发送或者接收数据时,必须下图所示的步骤进行初始化。
1. PE 位设定为 0
2. SWRST 设定为 1,通信复位
3. PE 位设定为 1,内部状态复位
4. 设定从机地址格式和地址
5. 设定波特率
6. 根据需要设定控制寄存器功能及中断
7. SWRST 位设定为 0,解除内部状态复位。
8. 初始化结束。可发送接收数据。

2,iic 数据的发送和接收:

 

在I2C(Inter-Integrated Circuit)通信中,通常由主机发起通信,但I2C协议也支持从机主动发送数据给主机,从机可以通过以下步骤主动向主机发送数据:

启动通信:从机等待主机发送启动信号(Start Condition),即在时钟线SCL保持高电平期间,数据线SDA由高电平向低电平跳变后面和主从数据交互一样的。 

a,iic地址模式

ACK/NACK深入了解:

数据传送过程中通过 SCL 时钟同步机制实现握手。从机在传送完一帧数据后(包含ACK 位),将 SCL 时钟线维持在低电平。在这种情况下, SCL 时钟的低电平让主机进入等待状态,直到从机释放 SCL 线。

从机什么时候释放 SCL 线

在第 9 个时钟下降后将 SCL 线保持为低电平。此时必须通过读 I2C_DRR 寄存器来结束通信释放 SCL 线 。I2C_SR.RFULLF 标志位为“1”的状态下, 如果不读取 I2C_DRR 寄存器的数据, 而立即接收下一个数据, SCL 时钟就在下一次 RFULLF 标志位变“1”的前一个 SCL 时钟自动保持为低电平。

结束通信标志:如果总线上从机接收数据,在第 9 个时钟周期不响应主机,从机必须发送 NACK。如果总线上主机接收数据,第 9 个周期发送 NACK,从机接收到 NACK,从机停止发送数据。

3,iic相关寄存器说明:

 中断相关控制寄存器:

 

获取中断状态相关的bit位:

 

状态清0:

设置时钟/波特率:

 

iic的中断处理:

关于华大单片机的I2C通信中的EEI(EEPROM Error Interrupt)、TEI(Transmitter Empty Interrupt)、TXI(Transmitter Interrupt)和RXI(Receiver Interrupt)这些中断,它们分别用于指示不同的I2C通信状态和错误。

EEI(EEPROM Error Interrupt):当I2C通信过程中发生EEPROM相关的错误时,如写保护、页错误等,会触发EEI中断。

TEI(Transmitter Empty Interrupt):当I2C发送缓冲区(TX缓冲区)为空时,触发TEI中断。这通常发生在发送连续数据包时,当发送缓冲区清空时,触发TEI中断。

TXI(Transmitter Interrupt):当I2C发送缓冲区(TX缓冲区)中有数据需要发送时,触发TXI中断。这通常发生在发送数据包的开始或中间,当发送缓冲区中有数据时,触发TXI中断。

RXI(Receiver Interrupt):当I2C接收缓冲区(RX缓冲区)中有数据接收时,触发RXI中断。这通常发生在接收数据包的过程中,当接收缓冲区中有数据时,触发RXI中断。

这些中断的触发条件由I2C模块内部的状态机和逻辑决定,通过读取相关的状态寄存器可以获取这些中断的状态。在中断服务程序中,可以根据这些中断的状态来判断通信状态和错误情况,并进行相应的处理。

具体的I2C中断处理和配置需要参考华大单片机的数据手册和开发文档,这些文档会提供更详细的关于中断寄存器、中断配置和中断处理流程的信息。由于华大单片机的型号和版本可能有所不同,具体的中断配置和处理方式可能会有所差异。


http://www.ppmy.cn/news/1508620.html

相关文章

人类的信仰从何而来?

原创 Kirill Nikitine 新发现科普书单 自人类诞生伊始,就不乏热衷于这个哲学基本问题的人士。基于近 15 个世纪以来多名伟大思想家发起的研究,科学家终于给出了答案。究其原因,人类学、神经学和文化因素促使人类拥有信仰。 在蒂姆・伯顿&…

执行start-dfs.sh后,datenode没有启动的最全解决办法(全网最全)

前言 在Hadoop中申请一个Flink的Session会话的时候出现了报错 报错内容 File /user/.flink/application_1723473994699_0002b/flink-table-api-java-uber-1.17.0.jar could only be written to 0 of the 1 minReplication nodes. There are 0 datanode(s) running and 0 node…

docker stop pause 区别

先说区别 🛑 docker stop :通过发送 SIGTERM 信号来停止正在运行的容器,如果容器在宽限期后仍未停止,则发送 SIGKILL 信号。这将完全停止容器的进程。 ⏸️ docker pause :使用 cgroups 冻结器暂停正在运行的容器中的…

理解 Objective-C 中 +load 方法的执行顺序

在 Objective-C 中,load 方法是在类或分类(category)被加载到内存时调用的。它的执行顺序非常严格,并且在应用启动过程中可能会导致一些令人困惑的行为。理解 load 方法的执行顺序对调试和控制应用的初始化过程非常重要。 load 方…

CVE-2024-38077:Windows远程桌面授权服务的‘隐形杀手’——深度剖析与紧急防护策略

文章目录 CVE-2024-38077:Windows远程桌面授权服务的‘隐形杀手’——深度剖析与紧急防护策略1 漏洞描述2 漏洞影响2.1 处置优先级:高2.2 影响版本 3 漏洞检测3.1 漏洞检测工具3.2 漏洞检测工具使用介绍3.2.1 漏洞检测工具当前支持三种方式检测3.2.2 漏洞…

【迁移学习】迁移学习的基本概念与应用

迁移学习 迁移学习的基本概念与应用 引言 迁移学习是一种机器学习技术,旨在将从一个领域中学到的知识应用到另一个相关领域中,以解决目标任务的训练数据不足和模型训练时间过长的问题。它在计算机视觉、自然语言处理等领域中得到了广泛应用。本文将详细…

2024年华为OD机试真题-学生重新排队-Python-OD统一考试(C卷D卷)

2024年OD统一考试(D卷)完整题库:华为OD机试2024年最新题库(Python、JAVA、C++合集) 题目描述: n个学生排成一排,学生编号分别是1到n,n为3的整倍数。老师随机抽签决定将所有学生分成m个3人的小组,n=3*m 为了便于同组学生交流,老师决定将小组成员安排到一起,也就是同…

java和c++两种语言的多态对比(java选手转c++必学!)多态-保研机试,大厂面试必问

多态(Polymorphism)是面向对象编程(OOP)中的一个重要概念,指的是同一个接口或基类在不同情况下可以表现出不同的行为。多态允许对象通过相同的接口或方法名以不同的方式执行操作,这种能力使代码更加灵活和可…