原创 SPI读取数据总为0

2010-4-11 16:21 10154 14 16 分类: MCU/ 嵌入式

ad3dcc35-46ad-4bb2-8650-9b275aa54321.JPG    最近在调试PIC24FJ256GB106与ENC28J60的SPI通讯时,发现一个莫名其妙的问题,百思不得其解。从改以太网芯片上确实采用了SPI的模式0的方式,PIC单片机用的是查询模式来操作SPI。以下为SPI3的初始化代码


void spi3_init(void)

 SPI3STATbits.SPIEN = 0 ;
 SPI3_CS=1;
 TRISBbits.TRISB2=0;     //cs select for output i/o
 
 IFS5bits.SPI3IF = 0; // clear interrupt flag
 IEC5bits.SPI3IE = 0; // disable  interrupt
 SPI3CON1 = 0x013f;  // select mode
 SPI3CON2 =0;
 SPI3STAT = 0x8000;  // enable the peripheral
 SPI3STATbits.SPIEN = 1 ;      
} // SPI3 init


//-----------------------------------------------------------------------------------------


 UI8_T spi3_read_write_byte(UI8_T transmit)

 UI8_T data;
 SPI3BUF=transmit;
 //while(!SPI3STATbits.SPIRBF);
 while ((SPI3STATbits.SPITBF == 0) || (SPI3STATbits.SPIRBF == 1));
 data= SPI3BUF;
 return data; 
}


//------------------------------------------------------------------------------------------


在使用 spi3_read_write_byte函数对ENC28J60的EIE寄存器写入0xAA,且发出读回命令时,分别抓取SPI3的DO,DI的数据波形均正确,但是SPI3BUF的寄存器读到得数据一致为零。


b8e63f1e-b979-4836-8c5e-cbd2850c4c0d.JPG


CH1: SPI3的clock


CH2:SPI3的DO


5cf75b49-624a-4b4f-a902-f19de6174d5c.JPG


CH1: SPI3的clock


CH2:SPI3的DI


从上面的波形上看,数据是正确送出,且正确返回到了DI但是就是数据拿不回来,确实令人费解。

文章评论2条评论)

登录后参与讨论

用户1362017 2014-10-8 12:55

注意pic单片机是否使用到了模拟端口,如果是先设置为数字io口,祝你好运。

用户377235 2014-8-22 22:25

请问这个问题解决了吗?可否告知一下解决方法。我也遇到一样的问题了。谢谢。

相关推荐阅读
用户1362017 2011-11-13 21:27
收到TI的LM3S811(2011-11-11)
在21IC网上提交了个方案,今天竟然收到了TI送得LM3S811的板子。看上去还不错。可以学下下传说中得cortex -M3看看比PIC24FJ的强多少。 还是先上图了,想了解她先观其貌。 ...
用户1362017 2011-11-13 21:10
看房2011-11-12
         时间过得可真快,咋眼间调试几个代码就到了周末了。这天,天气相当清爽。临时决定到房子那边看看修得如何了。         坐上306公交车(一路奔波1小时20多分钟,其中的感受略...
用户1362017 2011-10-24 22:43
设备级联【网络拓扑发现问题】
...
用户1362017 2011-10-24 22:41
基于LM3S811的outlet设计方案
...
用户1362017 2011-06-04 23:29
站起来走路的狗
    下班后路上还真遇到了,头一次见到这么可爱的狗,主任让它站起来就站起来,走起来还有模有样的,太不可思议了。上图吧。 ...
用户1362017 2011-06-04 23:25
新进三本unix编程书籍
    不知不觉就买了N本书了,算下来也过千了。没啥爱好,有些小钱就买些书放着学习。 ...
我要评论
2
14
关闭 站长推荐上一条 /2 下一条