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.

TMS320F28377D: McBSP通信问题咨询

Part Number: TMS320F28377D

最近在学习McBSP模块,需要用到两块开发板之间通过McBSP进行通信,程序需要实现:开发板A发数据,开发板B收数据,开发板B收到数据之后再将数据发送给开发板A,最后开发板A校验收到的数据是否和其发送的数据一致。

拿官方自回环例程改的,如下是官方自回环例程模块初始化程序:

    McbspaRegs.SPCR2.all=0x0000;        // Reset FS generator, sample rate
                                        // generator & transmitter
    McbspaRegs.SPCR1.all=0x0000;        // Reset Receiver, Right justify word
    McbspaRegs.SPCR1.bit.DLB = 1;       // Enable DLB mode. Comment out for
                                        // non-DLB mode.

    McbspaRegs.RCR2.bit.RDATDLY = 1;    // RX data delay is 1 bit
    McbspaRegs.XCR2.bit.XDATDLY = 1;    // TX data delay is 1 bit

    McbspaRegs.SRGR2.bit.GSYNC = 0;     // No clock sync for CLKG
    McbspaRegs.SRGR2.bit.FPER = 320;    // Frame-synchronization period

    McbspaRegs.SRGR2.bit.FSGM = 1;      // Frame-synchronization pulses from
                                        // the sample rate generator

    McbspaRegs.SRGR2.bit.CLKSM = 1;     // Sample rate generator input clock
                                        // is LSPCLK
    McbspaRegs.PCR.bit.SCLKME = 0;

    McbspaRegs.SRGR1.bit.CLKGDV = 1;    // Divide-down value for CLKG
    delay_loop();
    McbspaRegs.SRGR1.bit.FWID = 1;      // Frame-synchronization pulse width

    McbspaRegs.PCR.bit.CLKXM = 1;       // CLKX generated internally, CLKR
                                        // derived from an external source
    McbspaRegs.PCR.bit.FSXM = 1;        // FSX generated internally, FSR
                                        // derived from an external source

    //
    // Initialize McBSP Data Length
    //
    if(data_size == 8)                  // Run a loopback test in 8-bit mode
    {
      InitMcbspa8bit();
    }
    if(data_size == 16)                 // Run a loopback test in 16-bit mode
    {
      InitMcbspa16bit();
    }
    if(data_size == 32)                 // Run a loopback test in 32-bit mode
    {
      InitMcbspa32bit();
    }

    //
    // Enable Sample rate generator and
    // wait at least 2 CLKG clock cycles
    //
    McbspaRegs.SPCR2.bit.GRST = 1;
    delay_loop();

    //
    // Release from reset
    // RX, TX and frame sync generator
    //
    McbspaRegs.SPCR2.bit.XRST = 1;
    McbspaRegs.SPCR1.bit.RRST = 1;
    McbspaRegs.SPCR2.bit.FRST = 1;

我只更改了下面两个地方:McbspaRegs.SPCR1.bit.DLB = 0; McbspaRegs.SRGR2.bit.FSGM = 0;,更改之后发现两个板子之间传的数全是错的,也没找到啥规律,

两块开发板MCbsp模块初始化是一样的,

如下是开发板A中的发送和接收程序

 while(McbspaRegs.SPCR2.bit.XRDY == 0 ) { }  

McbspaRegs.DXR1.all=txdata1A;

while(McbspaRegs.SPCR1.bit.RRDY == 0 ) { } // Check for receive
rdata1A= McbspaRegs.DRR1.all;

如下是开发板B中的接收和发送程序:

while(McbspbRegs.SPCR1.bit.RRDY == 0 ) { } // Check for receive
rdata1B= McbspbRegs.DRR1.all;

while(McbspbRegs.SPCR2.bit.XRDY == 0 ) { }  

txData1B=rdata1B;

McbspbRegs.DXR1.all=txdata1A;

有没有前辈用过这个模块,给点意见或者相应程序也行,谢谢啦

  • 你好,抱歉不太熟悉这个模块,为你将问题升级至英文版E2E,还请留意以下帖子回复:https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1027603/tms320f28377d-problem-of-mcbsp-module