void spi_write_byte(uint addr, uchar dat)
{
uchar i;
spi_sck = 0;
spi_cs = 0;
for(i = 0;i < 16;i++)
{
spi_sck = 0; //在spi_sck的上升沿写出一位,高位在前,低位在后
if(addr & 0x8000)
spi_sdi = 1;
else
spi_sdi = 0;
spi_sck = 1;
addr<<= 1;
}
for(i = 0;i < 8;i++)
{
spi_sck = 0; //在spi_sck的上升沿写出一位,高位在前,低位在后
if(dat & 0x80)
spi_sdi = 1;
else
spi_sdi = 0;
spi_sck = 1;
dat<<= 1;
}
spi_cs = 1;
}
#if 0
uchar spi_read_byte(uint addr)
{
uchar i;
uchar send_data;
uchar receive_data;
addr &= 0x1FFF;//13bit_address
addr |= 0x8000; //read
spi_sdi = 0;
spi_cs = 0;
for(i=0; i<16; i++)
{
spi_sck = 0; //在spi_sck的上升沿写出一位,高位在前,低位在后
if(addr & 0x8000)
{
spi_sdi = 1;
}else{
spi_sdi = 0;
}
addr <<= 1;
delay(1);
spi_sck = 1;
delay(1);
}
send_data = 0x00;
receive_data = 0x00;
for(i=0; i<8; i++)
{
spi_sck = 0;
receive_data <<= 1;
if(spi_sdo)
{
receive_data |= 0x01;
}
if(send_data & 0x80) //
{
spi_sdi = 1;
}else{
spi_sdi = 0;
}
send_data <<= 1;
delay(1);
spi_sck = 1;
delay(1);
}
spi_cs = 1;
return(receive_data);
}
#else
uchar spi_read_byte(uint addr)
{
uchar i;
uchar rx_data;
addr &= 0x1FFF;//13bit_address
addr |= 0x8000;//read
spi_sdi = 0;
spi_cs = 0;
for(i=0; i<16; i++)
{
spi_sck = 0; //在spi_sck的上升沿写出一位,高位在前,低位在后
if(addr & 0x8000)
{
spi_sdi = 1;
}else{
spi_sdi = 0;
}
addr <<= 1;
delay(1);
spi_sck = 1;
delay(1);
}
rx_data = 0x00;
for(i=0; i<8; i++)
{
spi_sck = 0;
rx_data <<= 1;
if(spi_sdo)
{
rx_data |= 0x01;
}
spi_sdi = 0;
delay(1);
spi_sck = 1;
delay(1);
}
spi_cs = 1;
return(rx_data);
}
#endif