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 模块问题

Guru**** 2044430 points
Other Parts Discussed in Thread: C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1027603/tms320f28377d-problem-of-mcbsp-module

器件型号:TMS320F28377D
主题中讨论的其他器件:C2000WARE

尊敬的团队:

我的一位客户使用 McBSP 模块进行板对板通信。  他希望实现以下功能:

电路板 A 发送数据、电路板 B 接收数据、电路板 B 在接收数据后将数据发送回电路板 A、最后电路板 A 验证接收到的数据是否与其发送的数据一致。

他的项目是指官方的自回送程序。 以下是正式的自环回例程模块初始化程序:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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();
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

他只改变了两个位置:

McbspaRegs.SPCR1.bit.DLB = 0;  

McbspaRegs.SRGR2.bit.FSGM=0;

更改后、发现两个电路板之间传输的数据都是错误的、不规则的。

两个开发板的 McBSP 模块的初始化是相同的。 下面是板 A 中的发送和接收程序:

Fullscreen
1
2
3
4
5
6
7
while(McbspaRegs.SPCR2.bit.XRDY == 0 ) { }
McbspaRegs.DXR1.all=txdata1A;
while(McbspaRegs.SPCR1.bit.RRDY == 0 ) { } // Check for receive
rdata1A= McbspaRegs.DRR1.all;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

下面是电路板 B 中的发送和接收程序:

Fullscreen
1
2
3
4
5
6
7
8
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;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

配置是否有任何问题?

此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    绿色环保、

    [引用 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