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.
尊敬的团队:
我的一位客户使用 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;
配置是否有任何问题?
此致
绿色环保、
[引用 userid="306637" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1027603/tms320f28377d-problem-of-mcbsp-module "]发现两个主板之间传输的数据都是错误和不规则的。[/引用]寄存器中是否标记了任何错误? (请参阅章节:TRM 的 McBSP 异常/错误条件)
[报价 userid="306637" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1027603/tms320f28377d-problem-of-mcbsp-module "]配置是否存在任何问题?[/quot]我看不到当前配置的问题。 您是否尝试将 FGM 设置为1? 我建议查看下面的外部回送示例。 它位于 driverlib 中、而不是位字段中、但它将很好地表明通信适用于接收和发送。
C:\ti\c2000Ware_3_04_00_00\driverlib\f2837xd\examples\cpu1\McBSP\McBSP_ex6_loopback.c
此致、
Marlyn