winnie 发表于 2009-4-18 13:40:17

一个高效的模拟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的其它模式。
页: [1]
查看完整版本: 一个高效的模拟SPI的读写函数。