Part Number:TMS320F28335Other Parts Discussed in Thread:C2000WARE
为啥我这Rxbuf的数据始终比上一个数据大255?理论上Tx的数据应该跟Rx是一样的。
#########主函数 void main() {int i=0; //Uint16 senddata=0; //Uint16 recdata=0;char str[40];InitSysCtrl();InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable(); //LED_Init(); //TIM0_Init(150,200000);//200msUARTa_Init(4800);SPIA_Init();while(1){i++;if(i%500==0)//500次后,进入下面发送,该句作用就是延时。避免SPI数据发送太快,串口崩溃{recdata=SPIA_SendReciveData(senddata++);sprintf(str,"senddata=%drecdata=%d\r\n",senddata,recdata);UARTa_SendString(str);}DELAY_US(1000);} } #############SPI配置 void SPIA_Init(void) {EALLOW;SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1;// SPI-AEDIS;InitSpiaGpio();SpiaRegs.SPICCR.bit.SPISWRESET = 0; //复位SPISpiaRegs.SPICCR.all = 0x0047;//SPI软件将极性位重置为1(沿下降沿发送数据),每次移动8位字长,并禁止SPI内部环回(LOOKBACK)功能;SpiaRegs.SPICTL.all = 0x0006;// 启用主模式,正常相位, // 开启通话,关闭SPI接口。SpiaRegs.SPISTS.all = 0x0000;//溢出中断,禁止SPI中断;SpiaRegs.SPIBRR = 0x001F;//SPI波特率=37.5M/24=1.5MHZ;SpiaRegs.SPIPRI.bit.FREE = 1;//设置断点以免干扰执行SpiaRegs.SPICCR.bit.SPISWRESET = 1; //使能SPI } Uint16 SPIA_SendReciveData(Uint16 dat)//16位数据收发函数 {SpiaRegs.SPITXBUF=dat;//SpiaRegs.SPITXBUF=(dat<<8);while(SpiaRegs.SPISTS.bit.INT_FLAG != 1);{} //Wait until data is receivedreturn SpiaRegs.SPIRXBUF; }
Ben Qin:
你好,请先参考下C2000ware中的这个例程:
C2000Ware\device_support\f2833x\examples\spi_loopback_interrupts