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.

[参考译文] TMS320C6657:McBSP 发送一个附加字

Guru**** 2599215 points
Other Parts Discussed in Thread: TMS320F28377D

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/581062/tms320c6657-mcbsp-send-one-additionnal-word

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

你(们)好

我尝试在 DMA 模式下通过 McBSP 向 Delfino 处理器发送 N 个字。  

当 Delfino 上接收到 N 个字时、将调用中断。 然后、软件将 McBSP 的内部缓冲器复制到一个外部缓冲器中。 这些缓冲器是相等的。
但是、当 Delfino 再次初始化 RX 传输时、一个字被复制到内部缓冲区、而 C66 TX 传输不会开始。

例如、N = 3

C66 TX 缓冲器                             1 | 2 | 3

当中断被称为   1 | 2 | 3时、Delfino RX 缓冲器

 RX 初始化后的 Delfino RX 缓冲器        X | 2 | 3

数据"x"是随机数据(例如、它不是缓冲地址+(N + 1)处的数据);

C66似乎还发送了一个字。

你有什么想法吗?

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

    我已通知 C66x 团队。 他们的反馈将在此处发布。

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

    我看到您还在 TMS320F28377D 上发布了:在 OneShot 模式下通过 DMA 实现 McBSP。 标记是否回答了您的问题?

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

    你(们)好、David

    很抱歉耽误你的回答、感谢你花时间解决我的问题。

    不幸的是、我已经阅读了这些示例。

    我尝试使用相同配置的另一个测试。

    我发送一个16位的5个字的缓冲区、我希望接收16位的64个字。

    在测试中,我观察由 OSAL_mcbspDataBufferMalloc()函数分配的 McBSP 驱动程序的内部缓冲区地址。

    传输1:

    TX:1111 2223333 4444 5555

    RX:1111 2222 3333 4444 5555 5554

    它是 RX 帧的末尾吗? 否 所以

    传输2:

    TX:1111 2223333 4444 5555...

    RX:1111 2222 3333 4444 5555 5554 1111 2222 3333 4444 555554  

    它是 RX 帧的末尾吗? 否 所以

    传输3:

    TX:1111 2223333 4444 5555...

    RX:1111 2222 3333 4444 5555 5554 1111 2222 3333 4455 5554 1111 2222 3333 445555  5554

    如果我尝试发送4个16位的字

    传输4:

    TX:1111 2223333 4444

    RX:1111 2222 3333 4444 5555 5554 1111 2222 3333 4444 5555 5554 1111 2222 3333 4455 5554 1111 2222 3333 4455 5554 1111 2222 3333 4444 4444 4444

    因此、在每次传输中、会添加一个字。 有什么想法吗?

    在这里、这是我发送数据时的代码:

    [...]

    pIoBuf->cmd = McBSP_IOBuf_Cmd_write;
    pIoBuf->addr =(void *) getGlobalAddr (bufferTx);
    pIoBuf->size = framSizeInByte;
    pIoBuf->arg =(UINT32_t)pChannelTxObj;
    pIoBuf->status = McBSP_status_completed;
    pIoBuf->MISC=1;

    status = mcbspSubmitChan (pChannelTxObj、pIoBuf);

    [...]

    这是 TX 的 McBSP_ChanParams 配置:

    wordc宽度= McBSP_WordLength _16

    、.gblCbk = NUL

    ,.edmaHandle =空

    ,.edmaEventQue = 1.

    ,.hwiNumber = 8

    、.dataFormat = McBSP_BufferFormat_1SLOT

    ,.enableHwFifo = true

    、.chanConfig =&(McBSP_DataConfig){

    .phaseNum = McBSP_Phase_single  

    ,.wrdLen1 = McBSP_WordLength _16

    ,.frmLen1=1

    、.frmSyncIgn = McBSP_FrmSync_detect

    、.dataDelay = McBSP_DataDelay_0_bit

    、.intMode = McBSP_IntMode_ON_SYNCERR

    、.clkSetup =&(McBSP_ClkSetup){

    .frmSyncMode = McBSP_FsClkMode_internal

    ,.samplingRate = 1562500

    、.clkMode = McBSP_TxRxClkMode_internal

    、.frmSyncPolarity = McBSP_FsPol_ACTIVE_LOW

    、.clkPolarity = McBSP_ClkPoll_Rising


    这是 RX 的 McBSP_ChanParams 配置:

    wordc宽度= McBSP_WordLength _16

    、.gblCbk = NUL

    ,.edmaHandle =空

    ,.edmaEventQue = 1.

    ,.hwiNumber = 8

    、.dataFormat = McBSP_BufferFormat_1SLOT

    ,.enableHwFifo = true

    、.chanConfig =&(McBSP_DataConfig){

    .phaseNum = McBSP_Phase_single  

    ,.wrdLen1 = McBSP_WordLength _16

    ,.frmLen1=1

    、.frmSyncIgn = McBSP_FrmSync_detect

    、.dataDelay = McBSP_DataDelay_0_bit

    、.intMode = McBSP_IntMode_ON_SYNCERR

    、.clkSetup =&(McBSP_ClkSetup){

    .frmSyncMode = McBSP_FsClkMode_external

    ,.samplingRate = 1562500

    、.clkMode = McBSP_TxRxClkMode_external

    、.frmSyncPolarity = McBSP_FsPol_ACTIVE_LOW

    、.clkPolarity = McBSP_ClkPoll_Falling_EDGE