一个高效的模拟SPI的读写函数

发布者:泉地水无痕最新更新时间:2015-01-20 来源: laogu关键字:模拟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写的数据,也是从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的读写函数

上一篇:怎样在我的源程序中实现软件复位?
下一篇:PIC8位在PICC中的数据类型

推荐阅读最新更新时间: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
[单片机]
在ARM Linux下使用GPIO<font color='red'>模拟</font><font color='red'>SPI</font>时序详解
一个高效的模拟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接口协议要求接口设备按主一从方式进行配置,总线上可以连接多个可作为主机的控制器、
[单片机]
ARM与TLV5637的<font color='red'>模拟</font><font color='red'>SPI</font>接口设计
基于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
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved