基于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,欢迎一起交流学习。

猜你喜欢

转载自blog.csdn.net/weixin_38498942/article/details/86590196
今日推荐