Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1680092
  • 博文数量: 1493
  • 博客积分: 38
  • 博客等级: 民兵
  • 技术积分: 5834
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-19 17:28
文章分类

全部博文(1493)

文章存档

2016年(11)

2015年(38)

2014年(137)

2013年(253)

2012年(1054)

2011年(1)

分类:

2012-05-09 08:36:01

一个高效的模拟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的其它模式。
 
阅读(272) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~