我用的是C5509A。请问TI官方有没有提供MCBSP实现SPI接口的例程?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
具体碰到什么问题?参考user guide上的6.5 Procedure for Configuring a McBSP for SPI Operation配置就可以了。
http://www.ti.com/lit/ug/spru592e/spru592e.pdf
找到一篇c6000的mcbsp接SPI ROM的应用报告, 有兴趣的话可以参考一下。
http://www.ti.com/lit/an/spra487c/spra487c.pdf
我想通过SPI协议,让5509A与AT25256这个EEPROM进行通信,我希望采用MCBSP的中断方式来接受和发送数据,我目前自己写了一个一段程序,但是通信不成功,可能是我程序写的有问题,关键是我不知道问题出在哪。我已经按照你提供的配置方法去配置了MCBSP。我想问一下,有没有例程可以让我参考一下。
你好,我通过设置断点发现,程序没有进入接收中断程序,我所要发送和接受的数据是8bit word,因为我所用的EEPROM是按8bit word进行储存的。MCBSP的发送接收寄存器是16bit的,接收到8bit数据后,会触发接收中断吗?前提是我在配置MCBSP的时候,已经设置了,接收帧为single frame,1frame有一个word,一个word有8bit
检查一下R/XPHASE=0, R/XFRLEN1=0,R/XDATDLY=01这些设置是否正确?
R/XWDLEN设成8bit时,只会发8bit数据,跟DRR寄存器是16bit无关。
RRDY位置1吗?时序上EEPROM是否发了8bit数据给DSP?
恩,设置都是正确的。我又用查询方式,分布写了一下程序:
用的读写函数是MCBSP_write()和MCBSP_right()。最后程序是卡在了查询rrdy位置上,rrdy没有置1,请帮我看下,程序的逻辑有没有错,如果没错,再找别的原因。
Slave_Select(0);
while(MCBSP_xrdy(hMcbsp0)!=1);
MCBSP_write(hMcbsp0,0x06); //Enable Write
while(MCBSP_xrdy(hMcbsp0)!=1);
MCBSP_write(hMcbsp0,0x02); //write cmd
while(MCBSP_xrdy(hMcbsp0)!=1);
MCBSP_write(hMcbsp0,0x00); //addr
while(MCBSP_xrdy(hMcbsp0)!=1);
MCBSP_write(hMcbsp0,0x00); //addr
for(i = 0; i < 64; i++){
while(MCBSP_xrdy(hMcbsp0)!=1);
MCBSP_write(hMcbsp0,xmtbuf[i]);
}
Delay(10);
while(MCBSP_xrdy(hMcbsp0)!=1);
MCBSP_write(hMcbsp0,0x03); //read cmd
while(MCBSP_xrdy(hMcbsp0)!=1);
MCBSP_write(hMcbsp0,0x00); //addr
while(MCBSP_xrdy(hMcbsp0)!=1);
MCBSP_write(hMcbsp0,0x00); //addr
for(i = 0; i < 64; i++){
while(MCBSP_rrdy(hMcbsp0)!=1);
rcvbuf[i] = MCBSP_read(hMcbsp0);
}
Slave_Select(1);
你好,我量过,DR没有接收到信号。根据MCBSP的stop mode的工作方式,采样时钟在数据传输结束后会立刻停止。对于发送,主机MCBSP可以在发送数据的时候驱动时钟,但是,当接受数据时,主机MCBSP并不会去驱动时钟,这导致了从机无法将数据发送过来。我这样的理解正确吗?