1. 依次发送:
void Set_SDI (U32 Index)
{
if (Index) SDI = 1;
else SDI = 0;
}
void SPI_3W_SET_Cmd (U8 cmd)
{
U32 kk;
Set_SDI(0); //set DC=0, for writting to Command register
Set_SCL(0);
Set_SCL(1);
Set_SCL(0);
for(kk=0;kk<8;kk++)
{
if((cmd & 0x80) == 0x80) Set_SDI(1);
else Set_SDI(0);
Set_SCL(1);
Set_SCL(0);
cmd = cmd <<1;
}
// Close open-drain mos
Set_SCL(1);
Set_SDI(1);
}
该示例是按从高bit到低bit的顺序发送,如果想反过来,把
if((cmd & 0x80) == 0x80) Set_SDI(1);
cmd = cmd <<1;
语句更改为
if((cmd & 0x01) == 0x01) Set_SDI(1);
cmd = cmd >>1;
即可。
2. 依次接收:
U8 rdT;
rdT=0;
for(kk=0;kk<8;kk++)
{
rdT = rdT<<1;
Set_SCL(1);
if(SDO==1) rdT |= 0x01;
Set_SCL(0);
}
该示例中SDO为MCU接收pin脚,是bit单位。如果对于8bit或32bit不能位寻址的端口,可以将判断语句更改为
if(rGPEDAT&0x0800) rdT |= 0x01;
该示例是先按先高bit后低bit的顺序接收,如果想反过来,语句做如下更改即可
U8 rdT;
rdT =0;
for(kk=0;kk<8;kk++)
{
rdT = rdT>>1;
Set_SCL(1);
if(SDO==1) rdT |= 0x80;
Set_SCL(0);
}