Other 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);//200ms UARTa_Init(4800); SPIA_Init(); while(1) { i++; if(i%500==0) //500次后,进入下面发送,该句作用就是延时。避免SPI数据发送太快,串口崩溃 { recdata=SPIA_SendReciveData(senddata++); sprintf(str,"senddata=%d recdata=%d\r\n",senddata,recdata); UARTa_SendString(str); } DELAY_US(1000); } } #############SPI配置 void SPIA_Init(void) { EALLOW; SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1; // SPI-A EDIS; InitSpiaGpio(); SpiaRegs.SPICCR.bit.SPISWRESET = 0; //复位SPI SpiaRegs.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 received return SpiaRegs.SPIRXBUF; }
