完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
您好,
先前是使用NUC123当SPI MASTER,M058为SPI SLAVE,双方数据的沟通是正常的, 现在将SLAVE端的MCU改成M031,SLAVE端的接收同样是正确的,但发送资料有问题。 出现的问题为SLAVE在连续发送同样的数据(PACKAGE)时,第一次没输出波形、第二次则会成功, 简单的说就是MASTER必须发送二次命令才能取得SLAVE的资料。 如果直接改M031的 SAMPLE CODE也是同样的状况。 A. SPI MASTER FW的程序如下(NUC123): 1. CS -->LOW 2. SpiSendData -->发送命令1-1 3. SpiSendData -->发送命令1-2 4. for(i = 0; i < 8; i++) -->接收8笔来自SLAVE的资料 { SpiSendData(DeviceNo, 0xFFFFFFFFUL); *(pu32Buf + i) = SpiGetData(DeviceNo); Delayclock(100); } 5. CS -->HIGH SpiSendData的函式内容为: SPI_WRITE_TX0(SPI2, u32Data); SPI_SET_GO(SPI2); while(SPI_IS_BUSY(SPI2) != 0); B. SPI SLAVE FW的程序如下(M031): 1. 取得二笔来自MASTER的32位元资料并验证 2. if(USPI_GET_TX_FULL_FLAG(USPI0) == 0) SPI_WRITE_TX(SPI0, TransmitData); /* Write to TX FIFO */ 在示波器上看到的现象为,当MASTER第一次发出命令后,SLAVE端在执行 SPI_WRITE_TX后MISO并无输出波形; 而MASTER第二次发出命令后,SLAVE端在执行 SPI_WRITE_TX后可输出波形, 所以要取得SLAVE的资料需发送二次命令。 NUC123用的是旧版的Library,将要发送的资料填至TX buffer后,有再去唿叫SPI_SET_GO(SPI2); 而M031是否也要唿叫相似的命令呢?目前从Sample code上并没有找到类似的函式 请问还需加上什么程序?谢谢 |
|
相关推荐
1个回答
|
|
1、NUC123 有个FIFO模式的使能位。非FIFO模式,设置GO_BUSY=1启动传输;FIFO模式,往TX FIFO里填入数据启动传输。
2、M031没有FIFO模式使能位,但有传输使能位SPIEN(在SPI_Open函数里设置了),SPIEN位被设置后,作为从机,只要发送FIFO里有数据,一旦收到clk,就会把数据往外传。 3、前面所说的传输都是在片选信号有效的基础上。 4、建议将完整代码贴出来看一下。 |
|
|
|
只有小组成员才能发言,加入小组>>
656浏览 3评论
568浏览 2评论
385浏览 1评论
407浏览 1评论
369浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 14:51 , Processed in 0.704780 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号