基于mdm9206 threadx_os的spi操作相关API介绍
大家好,今天小白给大家介绍一下,关于mdm9206 threadx_os的spi操作相关的API,希望能和大家一起交流学习。
一. SPI简介
SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议, SPI驱动程序API提供高级别接口,公开SPI主控的功能。
二. 相关枚举变量
enum qapi_SPIM_Instance_t //SPI实例枚举
enum qapi_SPIM_Shift_Mode_t //SPI相位类型,主要包括时钟相位和时钟极性
enum qapi_SPIM_CS_Polarity_t //SPI芯片选择极性类型,空闲态期间,CS保持高或是低电平
enum qapi_SPIM_Byte_Order_t // 来自Tx / Rx缓冲字的字节放在总线上的顺序,大端或者小端
enum qapi_SPIM_CS_Mode_t //此类型定义了如何在N个字周期之间配置芯片选择线。
三. SPI相关接口定义
1. qapi_Status_t qapi_SPIM_Open ( qapi_SPIM_Instance_t instance, void ∗∗spi_Handle )
功能:此函数初始化内部数据结构以及关联的静态数据。 在任何操作模式下,应在调用任何其他SPI主API之前调用此函数。
参数:
in :instance, 是由qapi_SPIM_Instance_t指定的实例。
out:spi_Handle, 指向存储驱动程序句柄的位置的指针。
返回值:
类型:qapi_Status_t, 返回QAPI_OK - 调用成功,其他表示调用出错。
2. qapi_Status_t qapi_SPIM_Close ( void ∗ spi_handle )
功能:此函数释放所有内部数据结构并关闭SPI主接口。 然后qapi_SPIM_Open()返回的句柄无效。
参数:
in:spi_Handle, qapi_SPIM_Open()返回的驱动程序句柄。
返回值类型同上。
3. qapi_Status_t qapi_SPIM_Power_On ( void ∗ spi_Handle )
功能:此功能启用成功SPI事务所需的所有资源。 这包括时钟,电源和引脚多路复用功能。 应在传输或批量传输SPI之前调用此函数。
参数:
in:spi_Handle, qapi_SPIM_Open()返回的驱动程序句柄。
返回值:同上。
4. qapi_Status_t qapi_SPIM_Power_Off ( void ∗ spi_Handle )
作用:该函数关闭SPI主控器使用的所有资源。 这包括时钟,电源和GPIO。 应调用此函数以将SPI主控器置于其可能的最低功耗状态。
5. qapi_Status_t qapi_SPIM_Full_Duplex ( void ∗ spi_Handle, qapi_-SPIM_Config_t ∗ config, qapi_SPIM_Descriptor_t ∗ desc, uint32_t num_Descriptors, qapi_SPIM_Callback_Fn_t c_Fn, void ∗ c_Ctxt, qbool_t get_timestamp )
功能:该函数通过SPI总线执行异步传输。 转移可以是单向或双向的。 传输完成后会调用回调。
入参:
in:spi_Handle, qapi_SPIM_Open()返回的驱动程序句柄。
in:config,指向qapi_SPIM_Config_t描述的SPI配置结构的指针。
关于类型:qapi_SPIM_Config_t,定义如下:
typedef struct
{
qapi_SPIM_Shift_Mode_t SPIM_Mode;
qapi_SPIM_CS_Polarity_t SPIM_CS_Polarity;
qapi_SPIM_Byte_Order_t SPIM_endianness;
uint8_t SPIM_Bits_Per_Word; //数据位数,3~31任意数
uint8_t SPIM_Slave_Index; //表示第几个从设备
uint32_t Clk_Freq_Hz; //设置SPI时钟
uint32_t CS_Clk_Delay_Cycles; //不关心,设置为0就行
uint32_t Inter_Word_Delay_Cycles; //不关心,设置为0就行
qapi_SPIM_CS_Mode_t SPIM_CS_Mode;
qbool_t loopback_Mode; //通常为0.如果置位,SPI控制器将启用环回模式; 主要用于测试
} qapi_SPIM_Config_t;
in:desc,指向qapi_SPIM_Descriptor_t描述的结构的指针。如果选择半双工传输,则描述符可以具有NULL Tx OR Tx缓冲区。
关于类型:qapi_SPIM_Descriptor_t,定义如下:
typedef struct
{
uint8_t *tx_buf; //发送数据的缓冲区地址
uint8_t *rx_buf; //接收数据的缓冲区地址
uint32_t len; //传输的数据长度
}qapi_SPIM_Descriptor_t;
in:num_Descriptors, 表示客户端想要处理的描述符指针数。
in:c_Fn, SPI传输成功完成或出错时要调用的回调函数。
in:c_Ctxt, 指向将作为参数返回的客户端对象的指针c_Fn。
in:get_timestamp, 数据传输的时间戳。
四. SPI的简单用法
大致流程可以参考:
qapi_SPIM_Open() - 获取SPI实例的句柄。
qapi_SPIM_Power_On() - 打开成功SPI事务所需的所有资源。
qapi_SPIM_Full_Duplex() - 用于在SPI总线上执行传输的通用传输API。
qapi_SPIM_Power_Off() - 关闭qapi_SPIM_Power_On()设置的所有资源。
qapi_SPIM_Close() - 销毁SPI句柄创建的所有对象。
五. 总结
本篇主要介绍了基于mdm9206平台的threadx_os的spi操作相关的api,欢迎一起交流学习。
基于mdm9206 threadx_os的spi操作相关API介绍相关推荐
- 基于mdm9206 threadx_os的timer操作相关API介绍
大家好,今天小白给大家介绍一下,关于mdm9206 threadx_os的timer操作相关的api,希望能和大家一起交流学习. 一 . 概述 本篇介绍的接口是实现高级时间服务(ATS)计时器服务. ...
- 基于mdm9206 threadx_os的adc操作相关API介绍
大家好,今天小白给大家介绍一下,关于mdm9206 threadx_os的adc操作相关的API,希望能和大家一起交流学习. 1 ADC简介 模数转换器(ADC)允许对模拟信号进行采样和数字表示. S ...
- 基于mdm9206 threadx_os的I2c操作相关API介绍
大家好,今天小白给大家介绍一下,关于mdm9206 threadx_os的I2c操作相关的API,希望能和大家一起交流学习. 一:I2C简介 I2C是一种2线总线,用于将低速外设连接到处理器或微控制器 ...
- 基于mdm9206 threadx_os的gpio操作相关API介绍
大家好,今天小白给大家介绍一下,关于mdm9206 threadx_os的gpio操作相关的api,希望能和大家一起交流学习. 1.gpio模块概述 SoC具有许多功能,但由于尺寸缩小,通常会受到限制 ...
- 关于mdm9206 threadx_os的I2c操作相关的API,
大家好,今天小白给大家介绍一下,关于mdm9206 threadx_os的I2c操作相关的API,希望能和大家一起交流学习. 一:I2C简介 I2C是一种2线总线,用于将低速外设连接到处理器或微控制器 ...
- VB 文件常用操作相关API
下面是windows中提供的对于文件进行操作的API函数及其功能: Windows API函数 功能 CloseHandle 关闭一个内核对象.其中包括文件.文件映射.进程.线程.安全和同步对象等.涉 ...
- Win32路径操作相关API
一.路径截断与合并 PathRemoveArgs 去除路径的参数 PathRemoveBackslash 去除路径最后的反斜杠 "\" PathAddBackslash 在路径 ...
- Hibernate基础学习(二)—Hibernate相关API介绍
一.Hibernate的核心接口 所有的Hibernate应用中都会访问Hibernate的5个核心接口. (1)Configuration接口: 配置Hibernate,启动Hibernate,创建 ...
- WordNet相关API介绍及语义相似度计算方法
WordNet Introduction WordNet是由Princeton 大学的心理学家,语言学家和计算机工程师联合设计的一种基于认知语言学的英语词典.它不是光把单词以字母顺序排列,而且按照单词 ...
最新文章
- 运维工程师的职责和前景
- angularjs与java_关于angularjs与java结合,获取后台数据并解析的问题
- 阿里云AI发女朋友啦!
- magento 相关xml功能的介绍
- Kubernetes—如何批量删除对象资源?(二十三)
- MATLAB_平面几何_判断两平面矩形是否干涉
- 癌症世界难题_癌强大的真相被发现了,这4个难题不攻克,癌症难以治愈
- 紧追SpaceX,又一星际飞船明年4月要首次载人飞行
- git的基本使用和多人协作合并管理
- 安全清理大部分的C盘内存(一般10GB以上)
- 一次 HashSet 所引起的并发问题 1
- easyui-combobox之setText与setValue先后之分
- 怎样搬运视频不侵权,王者剪辑的指纹检测如何检测原创度
- vue中使用阿里图标
- 三维数据入库发布流程之3dMAX数据
- 2022 star*CTF-Writeup
- c# word 在当前光标位置插入内容
- 蓝鲸RFID固定资产管理系统
- 【微信小程序】微信小程序开发(一)
- Linux系列:给网卡添加IP地址方法