一个高效的模拟SPI的读写函数。
unsigned char RW_SPI(unsigned char val){
unsigned char BitCounter;
for (BitCounter=8;BitCounter!=0;BitCounter--){
CLK=0;
//write
DI=0;
if(val&0x80)
DI=1;
val<<=1;
CLK=1;
//read
if(DO)
val =1;
}
CLK=0;
return val;
}
此函数把SPI的读写功能集成在一块,传递的val既是向SPI写的数据,也是从SPI读取的数据,只需要在执行读或写之前把MCU的I/O脚设置成相应的输出或输入即可。(因为在大部分应用中,是把SPI的DI和DO相连并用MCU的一个IO口来读写)。
调用示例:
#define NULL 0
SETIO=OUTPUT;
CS=0;
RW_SPI(0xab);
CS=1;
//向SPI写0xab数据。
CS=0;
SETIO=INPUT;
Byte=RW_SPI(NULL); //这里传递的NULL是没有任何意义的,可以是任何数据,只是为了保证函数
//的格式.
CS=1;
//读取SPI数据。
此函数对于许多低档片子来模拟SPI非常有用,代码量小,功能齐全。稍微修改,可以模拟SPI的其它模式。
关键字:模拟SPI 读写函数
引用地址:
一个高效的模拟SPI的读写函数
推荐阅读最新更新时间:2024-03-16 13:51
STM32F103VET6 2.4G通信模块NRF24L01 GPIO模拟SPI的测试例程
自己画的一块基于STM32F103VET6的开发测试板,留有一个NRF24L01+的通信接口,之前买了一些NRF24L01+的模块打算研究一下用上,淘宝上买的比较便宜,可以用于物联网方面的无线应用吧。 做过NRF905的通信,NRF24L01的也是有些相似。网上教程一大堆,我原理上设计为GPIO模拟SPI,因此我找了个GPIO 模拟SPI通信的例程,改了下,开始出了点问题,后来找到原因并解决,通信正常了。 先说一下问题: NRF24L01引脚初始化问题,设置了引脚,但是GPIO初始化时,引脚没有对应上,因此程不跑,串口一直打印 找不到NRF24L01模块,因为有一个检测NRF24L01是否存在的函数。 //上电检
[单片机]
嵌入式系统中可配置式GPIO模拟SPI总线方法
在嵌入式系统处理器中有相当一部分处理器不带SPI接口,但基丁SPI接口的设备非常丰富,此外,SPI设备的不同以及处理器对GPIO口位寻址是否支持各处理器各有不同,因而不同处理器中软件模拟GPIO也各不相同。若能提供一种通用可配置可移植的GPIO模拟SPI总线的驱动则能很方便快捷的访问SPI设备,从而提高整个嵌入式系统的开发效率。本文针对GPIO口位寻址与否给出方面,给出了一种可配置GPIO模拟SPI总线的方法并详细介绍了其设计与实现过程,且具有代码小可移植性强使用方便等特点。 1 GPIO规范 SPI是一个全双工的串行接口。它设计成可以在一个给定总线上处理多个互联的主机和从机。在一定数据传输过程中,接口上只能有一个丰机和一个从
[工业控制]
在ARM Linux下使用GPIO模拟SPI时序详解
一、概述 SPI是英文SerialPeripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI是一种高速、全双工、同步通信总线,标准的SPI有4个引脚,常用于单片机和EEPROM、FLASH、实时时钟、数字信号处理等器件的通信。SPI通信原理要比I2C简单,它主要是主从方式通信,这种通信方式通常只有一个主机和一个或多个从机,标准的SPI是4根线,分别是SSEL(片选)、SCLK(时钟,也写作SCK)、MOSI(主机输入,从机输出)和MISO(主机输入,从机输出)。 SSEL:从设备片选使能信号。譬如从设备是低电平使能的话,当拉低这个引脚,从设备就会被选中,主机和这个被选中的从设备通信。 SCLK
[单片机]
一个高效的模拟SPI的读写函数
一个高效的模拟SPI的读写函数。 unsigned char RW_SPI(unsigned char val){ unsigned char BitCounter; for (BitCounter=8;BitCounter!=0;BitCounter--){ CLK=0; //write DI=0; if(val&0x80) DI=1; val =1; CLK=1; //read if(DO) val =1; } CLK=0; return val; } 此函数把SPI的读写功能集成在一块,传递的val既是向SPI写的数据
[单片机]
嵌入式系统中可配置式GPIO模拟SPI总线方法
在嵌入式系统处理器中有相当一部分处理器不带SPI接口,但基丁SPI接口的设备非常丰富,此外,SPI设备的不同以及处理器对GPIO口位寻址是否支持各处理器各有不同,因而不同处理器中软件模拟GPIO也各不相同。若能提供一种通用可配置可移植的GPIO模拟SPI总线的驱动则能很方便快捷的访问SPI设备,从而提高整个嵌入式系统的开发效率。本文针对GPIO口位寻址与否给出方面,给出了一种可配置GPIO模拟SPI总线的方法并详细介绍了其设计与实现过程,且具有代码小可移植性强使用方便等特点。 1 GPIO规范 SPI是一个全双工的串行接口。它设计成可以在一个给定总线上处理多个互联的主机和从机。在一定数据传输过程中,接口上只能有一个丰机和一个从
[嵌入式]
ARM与TLV5637的模拟SPI接口设计
引 言 SPI(Serial Peripheral Interface)是Motorola公司推出的一种同步串行外围接口。该接口由于协议实现简单,传输速度快等优点,已被广泛应用于EEPROM、 Flash、实时时钟、A/D转换器以及D/A转换器等芯片的读写。本文根据实际工程中的应用需求,用ARM芯片LPC2378的GPIO来模拟SPI接口,以实现对外围SPI接口器件的操作。其中,D/A转换是系统中的一个功能单元,利用GPIO模拟SPI接口的思想和方法,实现对串行D/A芯片 TLV5367的访问,以满足工程要求。 1 SPI串口通信格式 SPI接口协议要求接口设备按主一从方式进行配置,总线上可以连接多个可作为主机的控制器、
[单片机]
基于STC15W408AS单片机内部EEPROM读写接口函数
#include reg51.h #include intrins.h #define uint unsigned int #define uchar unsigned char #define ulong unsigned long typedef uchar BYTE; typedef uint WORD; sfr P1M1 = 0x91; //PxM1.n,PxM0.n =00--- Standard, 01--- push-pull sfr P1M0 = 0x92; // =10--- pure input, 11--- open drain sfr P0M1 = 0x93; sfr
[单片机]