请教关于F2812的SPI从模式问题

[复制链接]
 楼主| bindyu 发表于 2008-9-10 13:00 | 显示全部楼层 |阅读模式
最近在调试F2812的SPI从模式;<br />两块F2812对连,SPICLK-SPICLK;SPISIMO-SPISIMO;SPISTE-SPISTE;<br />一块做主,一块做从,做主的发送,采用中断或查询都正常,用示波器看过;但是接收部分用中断或查询都不对;rdata=SpiaRegs.SPIRXBUF;用单步执行两边的变量也总不相同;不知道为什么<br />数据总是乱的&nbsp;代码如下:<br />//**************slaver&nbsp;model&nbsp;and&nbsp;interrupt&nbsp;RX*************<br />&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;InitSpi()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />{<br /><br />//&nbsp;Initialize&nbsp;SPI&nbsp;FIFO&nbsp;registers<br />&nbsp;&nbsp;&nbsp;SpiaRegs.SPICCR.bit.SPISWRESET=0;&nbsp;//&nbsp;Reset&nbsp;SPI<br /><br />&nbsp;&nbsp;&nbsp;SpiaRegs.SPICCR.all=0x4F;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//16-bit&nbsp;character,&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;SpiaRegs.SPICTL.all=0x03;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Interrupt&nbsp;enabled,&nbsp;Slave&nbsp;XMIT&nbsp;enabled<br />&nbsp;&nbsp;&nbsp;SpiaRegs.SPISTS.all=0x0000;<br />&nbsp;&nbsp;&nbsp;SpiaRegs.SPIBRR=0x05;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Baud&nbsp;rate<br />&nbsp;&nbsp;&nbsp;//SpiaRegs.SPIFFTX.all=0xC028;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Enable&nbsp;FIFO's,&nbsp;set&nbsp;TX&nbsp;FIFO&nbsp;level&nbsp;to&nbsp;8<br />&nbsp;&nbsp;&nbsp;SpiaRegs.SPIFFRX.all=0x28;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Set&nbsp;RX&nbsp;FIFO&nbsp;level&nbsp;to&nbsp;16<br />&nbsp;&nbsp;&nbsp;SpiaRegs.SPIFFCT.all=0x00;<br />&nbsp;&nbsp;&nbsp;SpiaRegs.SPIPRI.all=0x30;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;SpiaRegs.SPICCR.bit.SPISWRESET=1;&nbsp;&nbsp;//&nbsp;Enable&nbsp;SPI<br /><br />&nbsp;&nbsp;&nbsp;//SpiaRegs.SPIFFTX.bit.TXFIFO=0;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;<br />&nbsp;&nbsp;}<br />&nbsp;interrupt&nbsp;void&nbsp;spiRxFifoIsr(void)<br />&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uint16&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rdata_point=(unsigned&nbsp;int&nbsp;*)(DP_start_UP_ADDR);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt8;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rdata=SpiaRegs.SPIRXBUF;//&nbsp;Read&nbsp;data<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt8;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*rdata_point=rdata&0xFFFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rdata_point++;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;SpiaRegs.SPIFFRX.bit.RXFFOVFCLR=1;&nbsp;&nbsp;//&nbsp;Clear&nbsp;Overflow&nbsp;flag<br />&nbsp;&nbsp;SpiaRegs.SPIFFRX.bit.RXFFINTCLR=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Clear&nbsp;Interrupt&nbsp;flag<br />&nbsp;&nbsp;&nbsp;&nbsp;PieCtrlRegs.PIEACK.all|=0x20;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Issue&nbsp;PIE&nbsp;ack<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;}<br /><br /><br />void&nbsp;spi_initial(void)<br />{&nbsp;SpiaRegs.SPICCR.bit.SPISWRESET=0;&nbsp;//&nbsp;Reset&nbsp;SPI<br />&nbsp;&nbsp;SpiaRegs.SPICCR.all=0x4F;//使SPI处于复位模式,下降沿,16位数据<br />&nbsp;&nbsp;SpiaRegs.SPICTL.all=0x06;//主控模式,一般时钟,使能talk,关闭SPI中断<br />&nbsp;&nbsp;SpiaRegs.SPIBRR=0x05;//配置波特率&nbsp;baud&nbsp;rate=LSPCLK/(3+1)<br />&nbsp;&nbsp;SpiaRegs.SPIPRI.all=0x0030;<br />&nbsp;&nbsp;SpiaRegs.SPICCR.bit.SPISWRESET=1;//退出复位<br /><br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;void&nbsp;SPITX()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{unsigned&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sdata_point=(unsigned&nbsp;int&nbsp;*)(SD_START_ADDR);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt8;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sdata1=*sdata_point;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpiaRegs.SPITXBUF=sdata1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(SpiaRegs.SPISTS.bit.INT_FLAG!=1){}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpiaRegs.SPIRXBUF=SpiaRegs.SPIRXBUF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sdata_point++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br /><br /><br /><br /><br /><br /><br /><br />&nbsp;&nbsp;
hotpower 发表于 2008-9-14 10:34 | 显示全部楼层

俺只用过主模式,在McBSP做SPI时用过从模式

应该不难~~~
hongh 发表于 2008-9-16 21:15 | 显示全部楼层

SPI的从机 要响应及时

  从机运行    你主机单步执行发送16个之后 看你从机收到了什么
fiann 发表于 2008-9-21 11:57 | 显示全部楼层

设置参数里面有一个延迟的选项

调整一下看看
spiderman9 发表于 2008-9-22 22:55 | 显示全部楼层

re

在从模式下,用示波器查看SPICLK对不对先
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部