关于mdm9206 threadx_os的I2c操作相关的API,
大家好,今天小白给大家介绍一下,关于mdm9206 threadx_os的I2c操作相关的API,希望能和大家一起交流学习。
一:I2C简介
I2C是一种2线总线,用于将低速外设连接到处理器或微控制器。常见的I2C外设包括触摸屏控制器,加速度计,陀螺仪以及环境光和温度传感器。
2线总线包括数据线,时钟线和基本的START,STOP和确认信号,以驱动总线上的传输。 I2C外设也称为I2C从器件。 处理器或微控制器实现I2C规范中定义的I2C主设备。 本篇介绍了访问I2C主实现的软件接口。
二:相关宏定义
#define QAPI_I2C_FLAG_START 0x00000001 //指定传输以START位开始 - S.
#define QAPI_I2C_FLAG_STOP 0x00000002 //指定传输以STOP位结束 - P.
#define QAPI_I2C_FLAG_WRITE 0x00000004 //必须设置为表示WRITE转移。
#define QAPI_I2C_FLAG_READ 0x00000008 //必须设置为表示READ传输。
.....
三:I2C相关接口定义
1. qapi_Status_t qapi_I2CM_Open ( qapi_I2CM_Instance_t instance, void ∗∗i2c_Handle )
2. qapi_Status_t qapi_I2CM_Close ( void ∗ i2c_Handle )
功能:由客户端代码调用以初始化相应的I2C实例。 成功时,i2c_Handle指向I2C实例的句柄。 API分配资源以供客户端句柄和I2C实例使用。这些资源在qapi_I2CM_Close()调用中释放。 API还可以为I2C硬件实例供电。 要禁用实例的电源,必须进行相应的qapi_I2CM_Close()调用。
参数:
in :instance, 客户端打算初始化的I2C实例;
out:i2c_Handle, 指针位置由驱动程序填充,带有句柄实例。
关于instance,类型是:qapi_I2CM_Instance_t ,定义如下:
enum qapi_I2CM_Instance_t,客户端想要使用的I2C内核的实例。 此实例在qapi_I2CM_Open()中传递。
返回值:
QAPI_OK - 调用成功
其他返回值代表不同的失败原因。
3. qapi_Status_t qapi_I2CM_Transfer ( void ∗ i2c_Handle, qapi_I2CM_Config_t
∗ config, qapi_I2CM_Descriptor_t ∗ desc, uint16_t num_Descriptors,
qapi_I2CM_Transfer_CB_t CB_Function, void ∗ CB_Parameter, uint32_t delay_us )
功能:执行I2C传输。 如果传输已由另一个客户端进行,则此调用将对传输进行排队。 如果传输返回失败,则传输尚未排队,并且不会发生回调。 如果传输返回QAPI_OK,则传输已排队,并且只有在调用回调时才能获得传输的进一步状态。
注意:在客户端调用此API之后,它必须等待完成回调才能再次调用API。 如果客户端希望对多个传输进行排队,则必须使用qapi_I2CM_Descriptor_t类型的描述符数组,而不是多次调用API。
参数:
in:i2c_Handle //处理I2C实例。
In:config //从属配置。 有关详细信息,请参阅qapi_I2CM_Config_t。
关于config参数,类型是:qapi_I2CM_Config_t,详细定义如下:
typedef struct
{
uint32_t bus_Frequency_KHz; // I2C总线速度,单位为kHz。
uint32_t slave_Address; //I2C设备地址
qbool_t SMBUS_Mode; //SMBUS模式配置参数,true设置为SMBUS模式
uint32_t slave_Max_Clock_Stretch_Us; //最大从时钟延时数
uint32_t core_Configuration1; //核心特定配置。 推荐是0。
uint32_t core_Configuration2; // 核心特定配置。 推荐是0。
} qapi_I2CM_Config_t
in:desc //I2C传输描述符。 请参阅qapi_I2CM_Descriptor_t
细节。 这可以是描述符数组。
in:num_Descriptors //描述符数组中的描述符数。
in:CB_Function //在传输完成时调用的回调函数发生在中断上下文中。 调用必须进行最少的处理,不得调用此处定义的任何API。
关于CB_Function参数, 类型如下:
4. typedef void( ∗ qapi_I2CM_Transfer_CB_t)(const uint32_t status, void
∗ CB_Parameter) //声明由客户端定义的回调函数的类型。
out:status, 传输的的完成状态
out:CB_Parameter, 回调函数的一个参数,被在qapi_I2CM_Transfer中传入。
in:CB_Parameter //客户端在此处传递的上下文将按原样返回回调函数。
in:delay_us //延迟以微秒为单位。
返回值:
QAPI_OK - 调用成功
其他返回值代表不同的失败原因。
5. qapi_Status_t qapi_I2CM_Power_On ( void ∗ i2c_Handle )
功能:为I2C事务开启I2C硬件资源。
参数:
in:i2c_Handle, 是qapi_I2CM_Open返回的驱动程序句柄。
返回值:
QAPI_OK - 调用成功
其他返回值代表不同的失败原因
6. qapi_Status_t qapi_I2CM_Power_Off ( void ∗ i2c_Handle )
功能:禁用I2C硬件资源。
参数:
in: i2c_Handle,是qapi_I2CM_Open返回的驱动程序句柄。
返回值:
QAPI_OK - 调用成功
其他返回值代表不同的失败原因
四:关于IIC接口使用的参考代码
void sample (void)
{
qapi_Status_t status = QAPI_OK;
qapi_I2CM_Config_t config;
uint32_t transferred1;
uint8_t buffer[4] = { 1, 2, 3, 4 };
qapi_I2CM_Descriptor_t desc[2];
status = qapi_I2CM_Open(QAPI_I2CM_INSTANCE_004_E, &i2c_handle); //获得操作句柄
config.bus_Frequency_KHz = 100; //config参数初始化
config.slave_Address = device_Address;
config.SMBUS_Mode = 0;
config.slave_Max_Clock_Stretch_Us = 100000;
config.core_Configuration1 = 0;
config.core_Configuration2 = 0;
desc[0].buffer= buffer; //desc参数初始化
desc[0].length= 4;
desc[0].transferred = &transferred1;
desc[0].flags= QAPI_I2C_FLAG_START | QAPI_I2C_FLAG_WRITE |
QAPI_I2C_FLAG_STOP;
res = qapi_I2CM_Transfer (client_handle, &config, &desc[0], 1,
client_callback, NULL); //数据传输
res = qapi_I2CM_Close (client_handle); //关闭I2C通道
}
void client_callback (uint32_t status, void *ctxt) //数据传输完成后调用的回调。
{
// Transfer completed
}
五 总结:
本篇主要介绍了基于mdm9206平台的threadx_os的I2C操作相关的api,欢迎一起交流学习。
---------------------
作者:weixin_38498942
来源:CSDN
原文:https://blog.csdn.net/weixin_38498942/article/details/86002613
版权声明:本文为博主原创文章,转载请附上博文链接!
关于mdm9206 threadx_os的I2c操作相关的API,相关推荐
- 基于mdm9206 threadx_os的I2c操作相关API介绍
大家好,今天小白给大家介绍一下,关于mdm9206 threadx_os的I2c操作相关的API,希望能和大家一起交流学习. 一:I2C简介 I2C是一种2线总线,用于将低速外设连接到处理器或微控制器 ...
- 基于mdm9206 threadx_os的timer操作相关API介绍
大家好,今天小白给大家介绍一下,关于mdm9206 threadx_os的timer操作相关的api,希望能和大家一起交流学习. 一 . 概述 本篇介绍的接口是实现高级时间服务(ATS)计时器服务. ...
- 基于mdm9206 threadx_os的spi操作相关API介绍
大家好,今天小白给大家介绍一下,关于mdm9206 threadx_os的spi操作相关的API,希望能和大家一起交流学习. 一. SPI简介 SPI,是英语Serial Peripheral Int ...
- 基于mdm9206 threadx_os的adc操作相关API介绍
大家好,今天小白给大家介绍一下,关于mdm9206 threadx_os的adc操作相关的API,希望能和大家一起交流学习. 1 ADC简介 模数转换器(ADC)允许对模拟信号进行采样和数字表示. S ...
- 基于mdm9206 threadx_os的gpio操作相关API介绍
大家好,今天小白给大家介绍一下,关于mdm9206 threadx_os的gpio操作相关的api,希望能和大家一起交流学习. 1.gpio模块概述 SoC具有许多功能,但由于尺寸缩小,通常会受到限制 ...
- I2C操作笔记——以 AT24C04为例
1.前言 对于大多数工程师而言,I2C永远是一个头疼的问题.相比UART和SPI而言,I2C的时序要复杂一些,I2C组合变化也丰富一些.在这里以AT24C04为例说明I2C使用过程中的一些注意点. 2 ...
- 单片机 I2C操作笔记——以 AT24C04为例
1.前言 对于大多数工程师而言,I2C永远是一个头疼的问题.相比UART和SPI而言,I2C的时序要复杂一些,I2C组合变化也丰富一些.在这里以AT24C04为例说明I2C使用过程中的一些注意点 ...
- linux重命名tar命令,linux常用操作指令4 —— 文件操作相关命令(mkdir、touch、rm、mv、cp、cat 、 find 、tar、chmod)...
文件操作相关命令 文件操作相关命令 1.创建文件夹mkdir 2.创建文件touch 3.移动文件夹mv(类似于剪切) 4.删除rm 5.重命名mv 6.复制cp 7.查看文件(cat.head.ta ...
- R包操作相关:安装、卸载、加载、移除、已经安装的包、包的路径、函数查看等
R包操作相关:安装.卸载.加载.移除.已经安装的包.包的路径.函数查看等 查看已经加载的R包: (.packages()) 列出包所在的路径: .libPaths() 查看已经安装的包的详细信息: i ...
最新文章
- Filter 设计模式编码实践
- 删库跑路大神的一生:曾在家造炸弹被捕,现卖房押宝NFT,原是开源创业之星...
- 数据结构之希尔排序图文详解及代码(C++实现)
- mysql开创_MySQL创始人打造MariaDB 全面兼容MySQL 5.1
- 牛客题霸 NC23 划分链表
- mysqld install mysql default_MySQL安装默认配置
- day24-抽象类与接口类
- 使用ASP.NET Core、JavaScript和Angular防止CSRF攻击
- 从旧版升级到MySql4.1上的中文乱码问题解决方案
- mapinfo将北京54坐标系转WGS84坐标系
- libcef和js交互
- 洛谷 P1724 东风谷早苗
- 服务器内置usb能否修改为外置,台式机内置的DVD刻录机可以改成外置的USB接口吗?...
- 写给大学时期自己的寄语
- ChinaSkills-网络系统管理(2021年全国职业院校技能大赛B-1 模块 B:Windows 环境 评分标准 )
- 【转】MBBMS CA方案
- mysql八小时前的数据,根据条件关联查询
- throwable和Exception的区别
- idea 初始界面_IntelliJ IDEA欢迎界面
- 算法设计与分析 实验二 分治法求解最近点对问题