英创信息技术EM9170 SPI接口用户指南简介

网友投稿 286 2022-11-01

英创信息技术EM9170 SPI接口用户指南简介

1、功能描述

图1:SPI总线SCLK和MOSI,MISO之间的关系

图1中的时钟极性(POL)决定了SPI串行时钟信号线(SCLK)空闲时的电平,如果POL=0,串行时钟空闲时为低电平,POL=1串行时钟空闲时为高电平。时钟相位(PHA) 用来决定数据在什么时刻输出和锁存输入。如果 PHA=0,SPI控制器在SCLK的下降沿输出数据,在SCLK上升沿锁存输入的数据。当PHA=1时,将在SCLK上升沿输出数据,而在SCLK下降沿锁存输入数据。SPI线上的主从设备必须根据具体情况设置匹配的传输时序模式,时序只有匹配,数据才能正常通讯。

2、操作说明

2.1 打开SPI端口 通过调用CreateFile( )函数来打开系统的SPI设备,设备名称为“SPI1:”如下所示:

2.2 数据通讯 在进行SPI数据通讯前,需要调用SPIConfig()函数对SPI总线做相应的配置,函数申明如下:

BOOL SPIConfig( HANDLE hCSPI, PCSPI_BUSCONFIG_T pCspiConfig );

其中参数pCspiConfig为SPI总线配置结构体,其定义如下:

用户调用SPIExchange()函数来完成一次数据收发,函数申明如下:

BOOL SPIExchange( HANDLE hCSPI, // 由CreateFile创建的HANDLE PVOID pTxBuf, // 发送数据缓存 PVOID pRxBuf, // 接收数据缓存 UINT32 xchCnt ); // 传输的数据个数

需要注意的是,参数pTxBuf和pRxBuf是LPVOID型指针变量,当设置SPI通讯位宽(CSPI_BUSCONFIG_T的bitcount成员)为1~8时,数据收发缓存(pTxBuf和pRxBuf)需要定义为UNIT8数据类型,当SPI通讯位宽为9~16时,数据收发缓存需要定义为UINT16类型,当SPI通讯位数为17~32时,数据收发缓存要定义成UINT32数据类型。

下面是示例程序片断:

HANDLE hSPI; // 定义SPI操作HANDLE DWORD dwXchCnt; // 定义传输字节个数 CSPI_BUSCONFIG_T spiConfig; // 定义SPI总线配置数据结构体 spiConfig.bitcount = 8; // bit count=8 spiConfig.freq = 16000000; // XCH speed = 16M spiConfig.pha = FALSE; // Phase 0 operation spiConfig.pol = FALSE; // Active high operation // if 1<=cspiConfig.bitcount<=8 收发缓存需要定义为UINT8类型 UINT8 TxData[1024] = { 0x01, 0x02, 0x03, 0x04, 0x05 }; UINT8 RxData[1024]; // if 9<=cspiConfig.bitcount<=16 收发缓存需要定义为UINT16类型 // UINT16 TxData[1024] = { 0x01, 0x02, 0x03, 0x04, 0x05 }; // UINT16 RxData[1024]; // if 17<=cspiConfig.bitcount<=32 收发缓存需要定义为UINT32类型 // UINT32 TxData[1024] = { 0x01, 0x02, 0x03, 0x04, 0x05 }; // UINT32 RxData[1024]; // 打开SPI总线 (SPIOpen( )内部调用了CreateFile()函数) hSPI = SPIOpen( TEXT(“SPI1:”) ); SPIConfig( hSPI, &spiConfig ); // 设置SPI总线配置信息 dwXchCnt = 5; // 传输5个数据 SPIExchange( hSPI, TxData, RxData, dwXchCnt ); // 进行SPI数据传输,传输5个数据

2.3 关闭SPI 调用CloseHandle函数关闭由CreateFile创建的HANDLE即可关闭SPI端口。

CloseHandle( hSPI);

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Haproxy集群
下一篇:springboot 整合sentinel的示例代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~