void SPI_Init()
{
M_CS_out;
M_SCK_out;
M_SDO_out;
M_SDI_in;
}
//向从机写一个8位的数据,同时读出30个bit位,前两个bit位不读。
long shiftbit(uchar nextch)
{
uchar i=0;
long data=0;
M_CS_L; //M_SDO_L;DelayNus(2);
while(M_SDI_IN);
for(i=0;i<2;i++)
{
if(nextch&0x80)
M_SDO_H;
else
M_SDO_L;
M_SCK_H;DelayNus(2);//_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
M_SCK_L;//DelayNus(2);
nextch<<=1;
}
for(i=0;i<8;i++)//多写的两个bit位 don't care
{
if(nextch&0x80)
M_SDO_H;
else
M_SDO_L;
nextch<<=1;
if(M_SDI_IN)
data |= 1;
data<<=1;
M_SCK_H;DelayNus(2);
M_SCK_L;
}
for(i=0;i<8;i++)
{
if(M_SDI_IN)
data |= 1;
data<<=1;
M_SCK_H;DelayNus(2);//_NOP();_NOP();_NOP();
M_SCK_L;
}
for(i=0;i<8;i++)
{
if(M_SDI_IN)
data |= 1;
data<<=1;
M_SCK_H;DelayNus(2);//_NOP();_NOP();_NOP();
M_SCK_L;
}
for(i=0;i<6;i++)
{
if(M_SDI_IN)
data |= 1;
data<<=1;
M_SCK_H;DelayNus(2);//_NOP();_NOP();_NOP();
M_SCK_L;
}
DelayNus(2);
M_CS_H;
return data;
}
以上是基于430的SPI程序,此程序在430
单片机里读到的数据都是多一个bit位,但是用逻辑仪观察的时候数据都是正常的,所以不知道是什么情况,希望前辈们指点指点。多谢大家。
一周热门 更多>