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.

28335中使用Mcbsp模拟SPI slave时发送读取数据时错误



        28335中使用Mcbsp模拟SPI slave,使用自带的SPI做master,不论发送还是读取数据都会出错,而反过来,使用Mcbsp模拟SPI master,SPI使用slave模式时,是正常工作了;后有使用GPIO口模拟SPI给Mcbsp发数据,在时钟周期为20us时可正常工作,但是提高时钟周期后则又出现相似错误。

     请问,在使用Mcbsp模拟SPI Slave模式时,有哪些方面的限制,比如时钟周期之类,或者是我设置的有不对的地方,下方附Mcbsp B配置成SPIslave模式的程序。

 

void InitMcbspb(void)
{

// McBSP-B register settings,Configuring McBSP-B for SPI slave

    McbspbRegs.SPCR2.all=0x0000;  // Reset FS generator, sample rate generator & transmitter
 McbspbRegs.SPCR1.all=0x0000;  // Reset Receiver, Right justify word

 McbspbRegs.SPCR1.bit.CLKSTP = 2 ; // 时钟停止模式,有时钟延迟

 McbspbRegs.PCR.bit.CLKXP = 0;  // 上升沿发送
 McbspbRegs.PCR.bit.CLKRP = 0;  // 下升沿接收

 McbspbRegs.PCR.bit.CLKXM = 0;       // 主设备,给外界提供时钟
 McbspbRegs.PCR.bit.CLKRM = 0;  //same
 McbspbRegs.PCR.bit.SCLKME = 0;  
 McbspbRegs.SRGR2.bit.CLKSM = 1;  // CPU内部时钟提供CLK

 McbspbRegs.SRGR1.bit.CLKGDV = 49;  // 150/4/50 = 750KHz = CLKG

 McbspbRegs.PCR.bit.FSXM = 0;   // 帧同步信号由采样频率发生器驱动

 McbspbRegs.SRGR2.bit.FSGM = 0;  // 数据从DXR1到XSR1时,在FSX脚上产生一个同步脉冲
 McbspbRegs.PCR.bit.FSXP = 1;  // FSX低电平有效

 McbspbRegs.RCR2.bit.RDATDLY = 0; // 数据延迟必须为0,配合SPI
 McbspbRegs.XCR2.bit.XDATDLY = 0; //  same
 
 McbspbRegs.SPCR1.bit.RJUST = 01; // 右对齐,高位符号扩展
 McbspbRegs.XCR1.bit.XFRLEN1 = 0; // 每帧一个数据字
 McbspbRegs.XCR1.bit.XWDLEN1 = 2; //  每个数据字16位

 McbspbRegs.RCR1.bit.RFRLEN1 = 0;
 McbspbRegs.RCR1.bit.RWDLEN1 = 2; //  接收每个数据字16位

 McbspbRegs.SPCR2.bit.GRST = 1;      //  采样频率发生器启动

 delay_loop1();
 McbspbRegs.SPCR2.bit.XRST=1;        // Enable Transmitter
    McbspbRegs.SPCR1.bit.RRST=1;  // Enable Receiver
 McbspbRegs.SPCR2.bit.FRST=1;   // 启动帧同步发生器
 delay_loop1();
}