Board logo

标题: SPI口写完就读应该这样操作吗 [打印本页]

作者: shpdlizj    时间: 2006-1-17 15:37     标题: SPI口写完就读应该这样操作吗

我用DP266的SPI1口读写EEPROM(AT25128),当从AT25128读出数据时,先向AT25128写读请求命令,然后接收AT25128发出的数据,是不是应该按以下操作:


   SPI1DR=READ;  //向 at25128写读请求命令
   while(!SPI1SR_SPTEF);
   delay(1); 
   SPI1DR=0xff; // 需要读的地址高8位
   while(!SPI1SR_SPTEF);
   delay(1); 
   SPI1DR=0xff; //需要读的地址低8位
   while(!SPI1SR_SPTEF);//等待发送完毕 
   
   while(!SPI1SR_SPTEF);//等待接收1字节 


 num=  SPI1DR;//读出数据


 


写完就读连续用2个while(!SPI1SR_SPTEF);有问题吗?


作者: strongchen    时间: 2006-1-17 15:53

DP256作为SPI的主机,在读数据其间要保持时钟信号的发送。
作者: shpdlizj    时间: 2006-1-18 09:59     标题: 如何保持时钟?

DP256作为主机,在发送时,能自动产生时钟,那在接收时,怎么保持时钟呢?
作者: strongchen    时间: 2006-1-18 10:03

最简单的方法就是继续发送。发送全“1”即可。
作者: shpdlizj    时间: 2006-1-18 10:49

SPI1SR_SPTEF会置位1次还是2次呢?
因为利用发送一个字节来产生接收时需要的时钟,而SPI1DR里的8个BIT发送完会
置位SPI1SR_SPTEF,SPI1DR接收到8个BIT也会置位SPI1SR_SPTEF,而这里实际接收和发送是同时进行,这样好象SPI1SR_SPTEF应该只置位1次。不知道我的理解是不是正确的。请指教。
作者: strongchen    时间: 2006-1-18 15:06

SPTEF只是用于指示发送寄存器空,可以写入新的发送数据。SPIF才是用来指示一次接收和发送的完成。
作者: shpdlizj    时间: 2006-1-19 10:25

那通过SPI口接收1字节是不是应该这样:

SPI1DR=0xff; //产生接收时钟
while(!SPI1SR_SPTEF);//等待发送完 1字节
while(!SPI1SR_SPIF); //等待接收到 1字节
作者: strongchen    时间: 2006-1-19 10:45

SPTEF置位只是表示发送数据寄存器中的数据已经传送到移位寄存器中,可以再写入新的发送数据了。请你仔细阅读相关文档。我在这个论坛里提过多次,要做一个项目,一定要先静下心来研读资料才行呀!
作者: 5711570    时间: 2006-10-1 12:03

请问谁有AT25128的中文资料,请发一份赶给我,E-MAIL:5711570@163.COM
作者: 5711570    时间: 2006-10-1 12:08

您好请问您有没有AT25128的中文资料,发一份给我,英文我看不懂.帮帮忙.我很急.




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0