关于mdm9206 threadx_os的I2c操作相关的API,

本文深入解析了mdm9206threadx_os平台下I2C操作的API,涵盖宏定义、接口定义及使用示例。介绍了I2C总线原理,详细解释了qapi_I2CM_Open、qapi_I2CM_Close等关键函数的使用方法,适合硬件开发人员学习。

大家好,今天小白给大家介绍一下,关于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 
来源:优快云 
原文:https://blog.youkuaiyun.com/weixin_38498942/article/details/86002613 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值