一个高效的模拟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]