我用的是C5509A。请问TI官方有没有提供MCBSP实现SPI接口的例程?
Shine:
具体碰到什么问题?参考user guide上的6.5 Procedure for Configuring a McBSP for SPI Operation配置就可以了。http://www.ti.com/lit/ug/spru592e/spru592e.pdf
Shine:
回复 Shine:
找到一篇c6000的mcbsp接SPI ROM的应用报告, 有兴趣的话可以参考一下。http://www.ti.com/lit/an/spra487c/spra487c.pdf
Fangbin Dong:
回复 Shine:
我想通过SPI协议,让5509A与AT25256这个EEPROM进行通信,我希望采用MCBSP的中断方式来接受和发送数据,我目前自己写了一个一段程序,但是通信不成功,可能是我程序写的有问题,关键是我不知道问题出在哪。我已经按照你提供的配置方法去配置了MCBSP。我想问一下,有没有例程可以让我参考一下。
Shine:
回复 Fangbin Dong:
具体怎么通信不成功?量过时序吗?看一下时序是否匹配?
Fangbin Dong:
回复 Shine:
你好,我通过设置断点发现,程序没有进入接收中断程序,我所要发送和接受的数据是8bit word,因为我所用的EEPROM是按8bit word进行储存的。MCBSP的发送接收寄存器是16bit的,接收到8bit数据后,会触发接收中断吗?前提是我在配置MCBSP的时候,已经设置了,接收帧为single frame,1frame有一个word,一个word有8bit
Shine:
回复 Fangbin Dong:
检查一下R/XPHASE=0, R/XFRLEN1=0,R/XDATDLY=01这些设置是否正确?R/XWDLEN设成8bit时,只会发8bit数据,跟DRR寄存器是16bit无关。RRDY位置1吗?时序上EEPROM是否发了8bit数据给DSP?
Fangbin Dong:
回复 Shine:
恩,设置都是正确的。我又用查询方式,分布写了一下程序:
用的读写函数是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);
Shine:
回复 Fangbin Dong:
你先要检查一下你的mcbsp_configure是否设置正确了?
时序是否量过?要EEPROM发送数据过来,RRDY才会置1.
Fangbin Dong:
回复 Shine:
恩,好的。配置没错,一步一步按照说明书里配置的。
时序的话,没有量过,也不会量,请问,有指导书吗?
Shine:
回复 Fangbin Dong:
用示波器量一下DR, CLKX, FSX管脚上的信号。