主题中讨论的其他器件:C2000WARE
尊敬的团队:
我的一位客户使用 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;
配置是否有任何问题?
此致