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:EDMA3TC ERRDET 读取错误

Guru**** 2559900 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/586048/tms320c6657-edma3tc-errdet-read-error

器件型号:TMS320C6657

当源地址为 McBSP1 FIFO 数据地址时、会导致 EDMA3TC 读取错误的原因是什么?

我正在尝试设置 EDMA 控制器以读取 McBSP1数据 FIFO、但收到"0x00002601"的 EDMA3TC ERRDET STAT 字段错误。

McBSP1在 FIFO 被启用时进行设置、并且 RNUMEVT 被设置为32个字(32位)。

EDMA CC 接收事件并传输到 TC0。

第一个参数集配置如下所示。  我还包含了 TC 寄存器内容。

ParamSet.opt = 0;
ParamSet.opt =/* 0x… *
  (0x0 << 31 | //* PRIV = 0 R */
  0x0 << 24 | //* PRIVID = 0 R */
  0x0 << 23 | // ITCCHE = 0 R/W 中间传输链被禁用*/
  0x0 << 22 | //* TCCHE = 0 R/W 传输完成链接被禁用*/
  0x0 << 21 | //* ITCINTE = 0 R/W 中间传输完成内部被禁用*/
  0x1 << 20 | //* TCINTE = 1 R/W 传输完成中断被启用*/
  0x26 <<12 | /* TCC = 38 R/W 传输完成代码= MCBSP1_REVT = 38 */
  0x0 << 11 | //* TCCMODE = 0正常完成*/
  0x2 << 8 | //* FWID = 2 FIFO 宽度32位*/
  0x0 << 3 | /*静态= 0 R/W 完成后将修改参数集*/
  0x0 << 2 | // SYNCDIM = 0 R/W A 同步传输*/
  0x0 << 1 | /* DAM = 0 R/W 目标地址增量*/
  0x0 <<0);  /* SAM = 0 R/W 源地址增量*/

ParamSet.SRC = MCBSP1_FIFO_DATA_ADDR;// 0x2400000u */
ParamSet.dst =(uint32_t) ddcPing;
ParamSet.link =(uint16_t)(MCBSP1_RX_PON_ParamSet * Size_ParamSet);
ParamSet.ACNT = 8*4;  /* 8个字(32位)*/
ParamSet.BCNT = 4;   /* 32个字(32位)*/
ParamSet.CCNT = 1;   //未使用*/
ParamSet.BCNTRLD = 0; // CCNT 归零时重新加载 BCNT (未使用)*/
ParamSet.SRCBIDX = 0; // FIFO - src addr 在 ACNT 归零时不会 incr *
ParamSet.dSTBIDX = 8*4;//目标地址增量32 */
ParamSet.SRCCIDX = 0; //未使用*/
ParamSet.dSTCIDX = 0; //未使用*/

EDMA_setPaRAM (EDMA3CC_BASE_ADDR、EDMA_MCBSP1_REVT、&ParamSet);

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

    您好、Bradley、

    我已将此内容转发给 McBSP 和 EDMA 专家。 他们的反馈应发布在此处。

    BR
    Tsvetolin Shulev

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

    如果您使用的是 Processor SDK RTOS ,www.ti.com/.../processor-sdk-c665x ,则有一个简单的 McBSP 示例,它使用 EDMA 并说明了如何使用 McBSP 驱动程序,这可能会有所帮助。

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

    这是一个 DO-178B 安全关键型应用。  出于验证原因、我们选择不使用 TI-RTOS 或 CSL。  在许多情况下、CSL 代码在尝试为处理器 API 编写驱动程序时无疑非常有用。  但是、有用的示例似乎使用 TI-RTOS。  即使使用对代码的理解、也不需要很长时间就能抽象出来、因此很难确定在寄存器级别发生的情况。

    无论如何、我在论坛搜索期间偶然发现了答案。  这件事偶然敲响了一个钟、因为几年前我在为 C6748编写 API 时遇到了同一个路障。  如果 EDMA 和我怀疑某些其他外设需要访问位于 L2中的存储器地址、例如参数目标地址、则必须使用位于0x10800000 (或 CorePac1 L2 SRAM)的 CorePac0 L2 SRAM 来访问该地址。  那么、类似于(对于 C6657内核0):

    ParamSet.dst =((uint32_t)&ddcEdmaPing[0])| 0x10000000;

    对于6748、我找到的唯一相关文档是 SPRS590E 中的存储器映射、表2-4。  它以灰色显示了标识哪些器件(DSP、EDMA、PRUSS、主设备外设、LCDC)、 无法访问特定的存储器范围。  例如、只有 DSP 能够访问0x01C0 0000以下的存储器位置。

    C6657在存储器映射中没有此类指示(SPRS814C、表6-63)。  它记录在哪里?  在我匆忙的时候,一定要错过它!