955|1

2601

帖子

3

资源

版主

【沁恒RISC-V内核 CH582】I2C 事件函数 [复制链接]

CH583 和 CH582 芯片提供 I2C 接口,特性如下: l 支持主机模式(Master)和从机模式(Slave),支持多主多从。 l 支持两种速度模式:100KHz 和 400KHz,兼容 I 2 C 两线串行总线规范。 l 支持 7 位或 10 位地址。 l 从设备支持双 7 位地址。 l 支持总线广播。 l 支持总线仲裁、错误检测、PEC 校验、延长时钟。 l 兼容 SMBus。

今天在外面,先熟悉一下硬件I2C的发送流程。回家时把用硬I2C驱动SSD1306OLED。以及SHT30.

 /*******************************************************************************
* Function Name  : I2C_CheckEvent
* Description    : 检查最后一个 I2Cx 事件是否等于传递的事件
*      as parameter.
* Input          : I2C_EVENT: 指定要检查的事件.
*                    I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED           : EV1.从机_发送器_地址_匹配
*                    I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED              : EV1. 从机_接收器_地址_匹配
*                    I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED     : EV1. 从机\发送器\第二地址\匹配
*                    I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED        : EV1.    从机\接收器\第二地址\匹配
*                    I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED            : EV1.  从机_一般调用地址_匹配
*                    I2C_EVENT_SLAVE_BYTE_RECEIVED                         : EV2.  从字节接收
*                    (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_DUALF)      : EV2. 从机_字节_接收| I2C_标志_DUALF
*                    (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_GENCALL)    : EV2.  从机字节接收I2C标志GENCALL
*                    I2C_EVENT_SLAVE_BYTE_TRANSMITTED                      : EV3.  从字节被传输
*                    (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_DUALF)   : EV3.  从_字节_传输| I2C_标志DUALF
*                    (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_GENCALL) : EV3.  从_字节_传输| I2C_标志_GENCALL
*                    I2C_EVENT_SLAVE_ACK_FAILURE                           : EV3_2.  从机_确认_故障
*                    I2C_EVENT_SLAVE_STOP_DETECTED                         : EV4.  从站_停止_检测到
*                    I2C_EVENT_MASTER_MODE_SELECT                          : EV5.  主控_模式_选择
*                    I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED            : EV6. 主控_变送器_模式_选择
*                    I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED               : EV6. 主机_接收器_模式_选择
*                    I2C_EVENT_MASTER_BYTE_RECEIVED                        : EV7.   主字节_接收
*                    I2C_EVENT_MASTER_BYTE_TRANSMITTING                    : EV8.  主字节_传输
*                    I2C_EVENT_MASTER_BYTE_TRANSMITTED                     : EV8_2.  主字节_传输
*                    I2C_EVENT_MASTER_MODE_ADDRESS10                       : EV9.  主模式_地址10
* Return         : 1 - SUCCESS or 0 - ERROR.
*******************************************************************************/

作为主发送:

1、配置

I2C_Init( I2C_Mode_I2C,  //模式

               400000,  // 指定时钟频率(Hz),此参数必须设置为低于400kHz的值

               I2C_DutyCycle_16_9,  //指定I2C快速模式占空比  有I2C_DutyCycle_16_9、  I2C_DutyCycle_2

               I2C_Ack_Enable,  //I2C_Ack  启用或禁用确认

               I2C_AckAddr_7bit,  //7位或10位地址。

               TxAdderss,   //指定第一个设备自己的地址。

                );

2、检查总线是否可用

while( I2C_GetFlagStatus( I2C_FLAG_BUSY ) != RESET );

3、生成I2Cx通信启动条件。START

I2C_GenerateSTART( ENABLE );

4、等待自动 地切换到主模式

while( !I2C_CheckEvent( I2C_EVENT_MASTER_MODE_SELECT ) );

5、发送从机地址  选择发送、接收模式

I2C_Send7bitAddress( RxAdderss, I2C_Direction_Transmitter );

6、等待主发送模式

while( !I2C_CheckEvent( I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED ) );

7、检查发送寄存器是否为空

if( I2C_GetFlagStatus( I2C_FLAG_TXE ) !=  RESET )

8、发送1-N个字节

I2C_SendData( TxData[i] );

9、等待发送完成事件

while( !I2C_CheckEvent( I2C_EVENT_MASTER_BYTE_TRANSMITTED ) );

10、产生停止标志

I2C_GenerateSTOP( ENABLE );

发送结束。

 


回复

7106

帖子

0

资源

五彩晶圆(中级)

跟着也熟悉一下硬件I2C的主发送的12个流程


回复
您需要登录后才可以回帖 登录 | 注册

相关帖子
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
    关闭
    站长推荐上一条 1/8 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表