这是我的代码,请大神指教
u32 ATT7053BU_SPI_Read(unsigned char com) //读取ATT7053BU的有效值
{
int i;
u32 read_data;
read_data = 0;
ATT7053BU_CLK = 0; //确保CLK初始状态是0
delay_us(1);
ATT7053BU_CLK = 1; //启动数据传输
delay_us(1);
ATT7053BU_DI = 0;//0表示主机向从机读数据
delay_us(1);
ATT7053BU_CLK = 0;//从机需要在下降沿取数据
delay_us(1);
/*提取数据*/
for(i=7; i>=0; i--)
{
ATT7053BU_CLK = 1;
delay_us(1);
if((com & (0x01<<i))>>i)//(com & 0x01)
{
ATT7053BU_DI = 1;
delay_us(1);
}
else
{
ATT7053BU_DI = 0;
delay_us(1);
}
delay_us(1);
ATT7053BU_CLK = 0;//从机需要在下降沿取数据
delay_us(1);
}
delay_us(2);
ATT7053BU_CLK = 1;
delay_us(1);
ATT7053BU_CLK = 0;
if(ATT7053BU_DO != 0)
read_data = read_data | 1;
delay_us(2); //从机接收到命令后,开始送出数据,上升沿送数据
for(i=0; i<23; i++)
{
ATT7053BU_CLK = 1;
delay_us(10);
ATT7053BU_CLK = 0;
delay_us(10);
read_data = read_data<<1;
if(ATT7053BU_DO != 0)
read_data++;
delay_us(1);
// delay_us(1);
}
ATT7053BU_CLK = 1;
delay_us(1);
return read_data;
}
void ATT7053BU_SPI_Write(u8 com,u32 write_data)
{
char i;
unsigned int temp_data;
temp_data = 1;
ATT7053BU_CLK = 0; //确保CLK初始状态是0
delay_us(20);
ATT7053BU_CLK = 1;//启动数据传输
delay_us(10);
ATT7053BU_DI = 1;//1表示主机向从机写数据
delay_us(10);
ATT7053BU_CLK = 0;//从机需要在下降沿取数据
delay_us(10);
for(i=6; i>=0; i--)
{
ATT7053BU_CLK = 1; //启动数据传输
delay_us(10);
if((com & (0x01<<i))>>i)
{
ATT7053BU_DI = 1;
// delay_us(1);
}
else
{
ATT7053BU_DI = 0;
// delay_us(1);
}
delay_us(10);
ATT7053BU_CLK = 0;
delay_us(10);
}
/*从机接收到命令后,开始送出数据,上升沿送数据*/
delay_us(40);
for(i=23; i>=0; i--)
{
ATT7053BU_CLK = 1; //启动数据传输
delay_us(10);
if(( write_data& (temp_data <<i) )>>i)
{
ATT7053BU_DI = 1;
delay_us(1);
}
else
{
ATT7053BU_DI = 0;
delay_us(1);
}
delay_us(10);
ATT7053BU_CLK = 0;
delay_us(10);
}
} |