Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1300074
  • 博文数量: 548
  • 博客积分: 7597
  • 博客等级: 少将
  • 技术积分: 4224
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-15 13:21
个人简介

嵌入式软件工程师&&太极拳

文章分类

全部博文(548)

文章存档

2014年(10)

2013年(76)

2012年(175)

2011年(287)

分类: 嵌入式

2012-05-08 12:00:04

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

背包包1112012-05-08 19:46:51

高效体现在哪里啊?