W5200模块刚到手,写了一个SPI读写的程序,想简单测试下SPI通讯是否起到作用,就想用SPI读出寄存器的默认值,但是不管怎么读都是0。
uchar SPI_RW(uchar byte)
{
uchar bit_ctr;
SCLK=0;
for(bit_ctr=0;bit_ctr<8;bit_ctr++)
{
MOSI = (byte & 0x80);
byte = (byte << 1);
SCLK = 1;
byte |= MISO;
SCLK = 0;
}
return(byte);
}
void SPI_WriteW5200(uint add,uchar date)
{
nSCS=0;
SPI_RW((add&0xff00)>>8); //дaddr byte1
SPI_RW((add&0x00ff)); //дaddr byte2
delay_us(10);
SPI_RW(0x80); //ддÃüÁî
SPI_RW(0x01); //дÊý¾Ý³¤¶ÈÒ»¸ö×Ö½Ú
delay_us(10);
SPI_RW(date); //·¢ËÍÊý¾Ý
nSCS=1;
}
uchar SPI_ReadW5200(uint add)
{
uchar date_tmp=0;
nSCS=0;
SPI_RW((add&0xff00)>>8); //дaddr byte1
SPI_RW((add&0x00ff)); //дaddr byte2
delay_us(10);
SPI_RW(0x00); //д¶ÁÃüÁî
SPI_RW(0x01); //дÊý¾Ý³¤¶ÈÒ»¸ö×Ö½Ú
delay_us(10);
date_tmp=SPI_RW(0); //½ÓÊÕÊý¾Ý
nSCS=1;
return date_tmp;
}
|