首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

SPI口写完就读应该这样操作吗

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);有问题吗?

              非学无以广才,非志无以成学;              
DP256作为SPI的主机,在读数据其间要保持时钟信号的发送。
海纳百川  有容乃大

如何保持时钟?

DP256作为主机,在发送时,能自动产生时钟,那在接收时,怎么保持时钟呢?
              非学无以广才,非志无以成学;              
最简单的方法就是继续发送。发送全“1”即可。
海纳百川  有容乃大
SPI1SR_SPTEF会置位1次还是2次呢?
因为利用发送一个字节来产生接收时需要的时钟,而SPI1DR里的8个BIT发送完会
置位SPI1SR_SPTEF,SPI1DR接收到8个BIT也会置位SPI1SR_SPTEF,而这里实际接收和发送是同时进行,这样好象SPI1SR_SPTEF应该只置位1次。不知道我的理解是不是正确的。请指教。
              非学无以广才,非志无以成学;              
SPTEF只是用于指示发送寄存器空,可以写入新的发送数据。SPIF才是用来指示一次接收和发送的完成。
海纳百川  有容乃大
那通过SPI口接收1字节是不是应该这样:

SPI1DR=0xff; //产生接收时钟
while(!SPI1SR_SPTEF);//等待发送完 1字节
while(!SPI1SR_SPIF); //等待接收到 1字节
              非学无以广才,非志无以成学;              
SPTEF置位只是表示发送数据寄存器中的数据已经传送到移位寄存器中,可以再写入新的发送数据了。请你仔细阅读相关文档。我在这个论坛里提过多次,要做一个项目,一定要先静下心来研读资料才行呀!
海纳百川  有容乃大
请问谁有AT25128的中文资料,请发一份赶给我,E-MAIL:5711570@163.COM
您好请问您有没有AT25128的中文资料,发一份给我,英文我看不懂.帮帮忙.我很急.
返回列表