28335用SPI接收的数据总是发送的数据,怎么回事儿? 10
我用dsp28335读取一个16位ADC芯片,用SPI进行读写的时候,dsp的SDO能收到正确的波形,SDI引脚却没有波形输出,而且读取SPIRXBUF里面的数,刚好就是...
我用dsp28335读取一个16位ADC芯片,用SPI进行读写的时候,dsp的SDO能收到正确的波形,SDI引脚却没有波形输出,而且读取SPIRXBUF里面的数,刚好就是我丢到SPIRXBUF里面发送的数据,网上说是查到DSP的SCI通讯方式的话有这种情况的话,这种原因是RX和TX共用了buf,想问问SPI是不是一样的情况? 小白一个求指导。下面附上SPI的寄存器配置和我读取ADC芯片的程序,帮帮忙看看有没有什么问题。
展开
2个回答
展开全部
1 注意数据写入SPITXBUF时是左对齐,而读入SPIRXBUF是右对齐。这个问题在16位字长时不突出,但是在16位以下数据字长时要特别注意,一般方法是做左移运算。
2 数据丢失问题:在开启SPIFIFO增强功能时,不能根据SpiaRegs.SPISTS.bit.BUFFULL_FLAG来暂停发送数据。因为此时的TXBUF是从TXFIFO中得数据。程序中写入TXBUF,只是写入发送缓冲器即FIFO。根据先进先出原理,你源源不断地向TXBUF写数据,则FIFO里总是保存你最后写入的数据,而不会将SpiaRegs.SPISTS.bit.BUFFULL_FLAG位置1,所以会发现数据丢失。正确的方法应该判断SPITXFIFO中的字的个数。
2 数据丢失问题:在开启SPIFIFO增强功能时,不能根据SpiaRegs.SPISTS.bit.BUFFULL_FLAG来暂停发送数据。因为此时的TXBUF是从TXFIFO中得数据。程序中写入TXBUF,只是写入发送缓冲器即FIFO。根据先进先出原理,你源源不断地向TXBUF写数据,则FIFO里总是保存你最后写入的数据,而不会将SpiaRegs.SPISTS.bit.BUFFULL_FLAG位置1,所以会发现数据丢失。正确的方法应该判断SPITXFIFO中的字的个数。
追问
您的意思是我现在的问题就是写入缓冲器TXBUF之后还没有发送出去,就被我从RXBUF里面读取出来了,是这个意思吗?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询