TI中文支持网
TI专业的中文技术问题搜集分享网站

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();
}

Tony Chopper:

我怎么感觉这个配置是对的

        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();
}

linfeng duan:

回复 Tony Chopper:

您好,我问一下,这个F28335的配置寄存器 在哪个文档里面有呀?我都不知道怎么去配置,玛法您发我一份好不?353092242@qq.com

赞(0)
未经允许不得转载:TI中文支持网 » 28335中使用Mcbsp模拟SPI slave时发送读取数据时错误
分享到: 更多 (0)