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.

[参考译文] TMS320C5517:McBSP 发送不会触发 DMA3CH1、接收触发 DMA3CH0

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/663156/tms320c5517-mcbsp-transmit-does-not-trigger-dma3ch1-receive-triggers-dma3ch0

器件型号:TMS320C5517

尊敬的 e2e:

标题说明了其中的大部分内容。

我已经为 TDM I2S 配置了 McBSP、现在已经启用了用于测试的数字回路。

DXR (U 和 L)的内容(对于现在的硬编码)已正确且重复从模块中计时、并且在回送时、DMA 控制器(DMA3CH0)会接收并复制到存储器中的正确位置。

但 DMA 控制器(DMA3CH1)不为发送器模块提供服务。 作为测试、我将 DMA3CH1设置为在 REVT 上触发、然后触发正常、因此问题似乎是 McBSP 模块的发送部分实际上不会在发送事件(XEVT)上标记 DMA 控制器。

我不使用该模块的任何多通道功能。

DMA 的初始化代码如下:  

void i2sDMAInit (void){

//为 DMA3启用时钟
PCGCR2 &= 0xFFFF -(1 << 5);
//清除 DMA 中断标志
DMAIFR = 0xFFFF;
//为通道0和1启用 DMA 中断
IER0 |= 0x0100;
DMAIER |= 0x3000;
// 0x0001:CH1的 McBSP 发送事件、0x0002:CH0的 McBSP 接收事件
DMA3CESR1 =(0x0001 << 8)+(0x0002);

// DMA3CH0 (接收器)
//来源:McBSP sectiona 的 DMA 地址中的 X2000偏移量
DMA3CH0SSAL =(uint16_t)(&McBSP_DRRL)+ 0x2000;
DMA3CH0SSAU = 0x0000;
//目标:从 CPU 字地址到 DMA 字节地址的转换(<< 1)、拆分为上下两部分、AD 0x8到上两部分用于 SARAM 的0x90000偏移量(即使手动设置为添加0x9)。
DMA3CH0DSAL =(uint16_t)(((uint32_t) inMcBSPDMA3CH0->buf)<< 1);
DMA3CH0DSAU =(uint16_t)((((uint32_t) inMcBSPDMA3CH0->buf)>> 15)+ 8);
// 2字节/字、2通道(L+R)、2个缓冲器(乒乓)、9个编解码器、乘以 BUFSIZE
DMA3CH0TCR1 = BUFSIZE * 2 * 2 * 9;
// EN = 1、INTEN = 1、AUTORLD = 1、DSTAMODE 自动递增、SRAMODE 恒定地址、 BURSTMODE = 0 (32位)、SYNCMODE = 1、PING_PON_EN = 1
DMA3CH0TCR2 = 0xB085;

// DMA3CH1 (发送器)
//目标:McBSP 段的 DMA 地址中的 X2000偏移量
DMA3CH1DSAL =(uint16_t)(&McBSP_DXRL)+ 0x2000;
DMA3CH1DSAU = 0x0000;
//源:从 CPU 字地址到 DMA 字节地址的转换(<< 1)、拆分为上下两部分、AD 0x8到上两部分用于 SARAM 的0x90000偏移量(即使手动设置为添加0x9)。
DMA3CH1SSAL =(uint16_t)(((uint32_t) outMcBSPDMA3CH1->buf)<< 1);
DMA3CH1SSAU =(uint16_t)((((uint32_t) outMcBSPDMA3CH1->buf)>> 15)+ 8);
// 2字节/字、2通道(L+R)、2个缓冲器(乒乓)、9个编解码器、乘以 BUFSIZE
DMA3CH1TCR1 = BUFSIZE * 2 * 2 * 9;
// EN = 1、INTEN = 1、AUTORLD = 1、DSTAMODE 恒定地址、SRAMODE 自动递增、 BURSTMODE = 0 (32位)、SYNCMODE = 1、PING_PON_EN = 1
DMA3CH1TCR2 = 0xB205;
} 

McBSP 的初始化如下:

void mcbspInit (void){
PCGCR1 |= 0x0020;//禁用 McBSP 外设
EBSR = 0x0300;//将 SP0设置为 McBSP
PCGCR1 &=~0x0020;//启用 McBSP 时钟
CLKSTOP1 &=~0x0040;//禁用 MPBCLKSTPREQ
PRCR = 0x0040;//重置 McBSP
while ((PRCR & 0x0040)= 0x0040);
//Step 2
McBSP_SPCLL=0x0000;
McBSP_SPCRU = 0x0000;
McBSP_PCRL |= 0x0A00;//将 FSXM 设置为输出和内部源。


//Step 3.
McBSP_RCRL =(31 << 8)+(0x5 << 5);// RFRLEN1:(31 + 1)个字每帧(18条 Rx 线路),RWDLEN1:每个字16位(表8-29)
McBSP_RCRU = 0x0000;
McBSP_XCRL =(31 << 8)+(0x5 << 5);// XFRLEN1:(31 + 1)个字每帧(18条 TX 线路)、XWDLEN1:每个字16位(表8-29)
McBSP_XCRU = 0x0000;
McBSP_SRGRU =(0x1 << 13)+(0x1 << 12)+ 511;// FGM = CLKSM = 1、FPER = 511 + 1 (表8-34)
McBSP_SRGRL =(uint16_t)(255 << 8)+ 15;// FWID = 255 + 1、CLKGDV = 15 + 1
NOP(50);
McBSP_SPCRU ||(1 << 6);//启用 CLKG (禁用 GRST)
NOP(50); //等待两个 CLKG 时钟周期进行同步
McBSP_SPCRU |= 0x1;//启用发送(禁用 XRST)
NOP(50); //等待两个 CLKG 周期以获得可能的同步错误
McBSP_SPCRU &=~0x0001;//禁用发送以清除同步错误
McBSP_SPCRU |= 0x0001;//重新启用发送(禁用 XRST)
McBSP_SPCRL |= 0x8001;//启用接收(禁用 RRST)
McBSP_PCRL ||(0x1 << 11)+(0x1 << 9);//将 FSXM 设置为输出和内部源(CLKXM = 1)。
McBSP_SPCRU |= 0x0280;//启用帧同步发生器(frst=1)和自由娱乐模式 

有没有常见的 McBSP-DMA 组合缺陷、或者有人能发现我在某个地方犯了一个可怕的简单错误吗? 我已经开始关注这个问题并进行调试2天了、对它有点视而不见。

此致。

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

    我已通知软件团队。 他们将直接在此处发布反馈。

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

    当将 CH1设置为也在 MCBSPRX 事件上触发时、它会正确递增其源地址寄存器并触发 CPU 中断。

    这似乎表明 DMA 已正确设置、但并未获取任何 XEVT 同步事件。

    但是、当设置为在 REVT 上触发时、它应该覆盖 DXR 寄存器、但它不会覆盖。 为了进行调试、我将 DXR 设置为0xAAAAAAAA、即使 CH1看起来同步正确、它也保持这种状态。 0x6004不是 DMA 写入 DXR 的正确地址?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    已解决!

    使用 DMA 时的 DXR 不是0x6004。 它是0x6010。 使用此地址可以解决所有上述问题。

    C5516用户指南中或任何明显的地方都未记录0x6010的使用。 我在该主题中找到了答案:

    https://e2e.ti.com/support/dsp/c5000/f/109/p/550797/2014444

    认真地说、该主题已有一年多的历史、您还没有更新您的文档...? 我甚至无法从该主题中的屏幕截图中找到包含表格的文档!

    不好意思、TI。。。  

    ಠ ć ಠ ć

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

    感谢您将您的解决方案发布到该问题、并链接到另一个包含该解决方案的 e2e 线程。
    我在内部进行了整理、以更正文档。

    Lali