This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28335: 大佬们,我想问一下,我的这个SPI配置有问题吗?理论上应该是发送和接收是一样的数据呀

Part Number: TMS320F28335
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;
}