unsigned long SPI_Read( unsigned char address )
{
signed char i;
unsigned long temp_data;
temp_data = 0;
ATT7053_SCK_LOW; /* 确保CLK初始状态是 */
Delay1us( 1 );
ATT7053_CS_HIGH;
Delay1us( 2 );
ATT7053_CS_LOW;
Delay1us( 5 );
ATT7053_SCK_HIGH; /* 启动数据传输 */
Delay1us( 1 );
ATT7053_MOSI_LOW; /* 0表示主机向从机读数据 */
Delay1us( 1 );
ATT7053_SCK_LOW; /* 从机需要在下降沿取数据 */
Delay1us( 1 );
for ( i = 6; i >= 0; i-- )
{
ATT7053_SCK_HIGH; /* 启动数据传输 */
Delay1us( 1 );
if ( (address & (0x01 << i) ) >> i )
ATT7053_MOSI_HIGH; /* address 地址从0x00到0x7F */
else
ATT7053_MOSI_LOW;
Delay1us( 1 );
ATT7053_SCK_LOW; /* 从机需要在下降沿取数据 */
Delay1us( 1 );
}
/* 从机接收到命令后,开始送出数据,上升沿送数据 */
Delay1us( 1 );
ATT7053_SCK_HIGH;
Delay1us( 1 );
ATT7053_SCK_LOW;
if ( ATT7053_MISO_VALUE )
temp_data = temp_data | 1;
Delay1us( 1 );
for ( i = 0; i < 23; i++ )
{
ATT7053_SCK_HIGH;
Delay1us( 1 );
ATT7053_SCK_LOW;
if ( ATT7053_MISO_VALUE )
miso_val = 1;
else
miso_val = 0;
temp_data = (temp_data << 1) | miso_val;
Delay1us( 1 );
}
ATT7053_CS_HIGH;
return(temp_data);
}
void SPI_Write( unsigned char address, unsigned int write_data )
{
signed char i;
unsigned int temp_data;
temp_data = 1;
ATT7053_SCK_LOW; /* 确保CLK初始状态是0 */
Delay1us( 100 );
ATT7053_CS_HIGH;
Delay1us( 50 );
ATT7053_CS_LOW;
Delay1us( 100 );
ATT7053_SCK_HIGH; /* 启动数据传输 */
Delay1us( 10 );
ATT7053_MOSI_HIGH; /* 1表示主机向从机写数据 */
Delay1us( 10 );
ATT7053_SCK_LOW; /* 从机需要在下降沿取数据 */
Delay1us( 10 );
for ( i = 6; i >= 0; i-- )
{
ATT7053_SCK_HIGH; /* 启动数据传输 */
Delay1us( 10 );
if ( (address & (0x01 << i) ) >> i ) /* address 地址从0x00到0x7F */
{
ATT7053_MOSI_HIGH;
}else ATT7053_MOSI_LOW;
Delay1us( 10 );
ATT7053_SCK_LOW; /* 从机需要在下降沿取数据 */
Delay1us( 10 );
}
/* 从机接收到命令后,开始送出数据,上升沿送数据 */
Delay1us( 40 );
for ( i = 23; i >= 0; i-- )
{
ATT7053_SCK_HIGH; /* 启动数据传输 */
Delay1us( 10 );
if ( (write_data & (temp_data << i) ) >> i ) /* address 地址从0x00到0x7F */
{
ATT7053_MOSI_HIGH;
}else ATT7053_MOSI_LOW;
Delay1us( 10 );
ATT7053_SCK_LOW; /* 从机需要在下降沿取数据 */
Delay1us( 10 );
}
ATT7053_CS_HIGH;
}