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