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.

[参考译文] TMS320C6748:定时器 DMA 将源传输到目的

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/669257/tms320c6748-timer-dma-doent-transfer-source-to-destination

器件型号:TMS320C6748

你好。

我想使用 timer3 DMA 例程。 我执行了一个程序、它按照要求进入 DMA 完成例程、但不会在相应的 DMA 通道中将数据从源寄存器传输到目标寄存器。 我的 DMA 通道是26。 我已使用乒乓方法、在 DMA 通道中成功更新了链路地址和源地址、但数据未从源写入目标。 现在、我已配置为将1个字节的数据从源写入目的。 即使发生了这种情况。 附件是我的程序、下面给出的是 acnt、bcnt 设置等。帮助我解决问题。

paramSet1.srcAddr =(unsigned int) buffer;
paramSet1.destAddr =(unsigned int)&(toggle_val);//0x01e26064;//GPIO_outdata45
paramSet1.aCnt =(无符号短整型) 1;
paramSet1.bCnt =(无符号短整型) 1;
paramSet1.ccnt =(无符号短整型) 1;


paramSet1.srcBIdx =(短整型) 0U;


paramSet1.destBIdx =(简版) 0U;

/*同步传输模式*/
paramSet1.srcCIdx =(短整型) 0U;
paramSet1.destCIdx =(简版) 0U;
paramSet1.linkAddr = 0x01e34220;
paramSet1.bCntReload =(无符号短整型) 0U;
paramSet1.op=0x0011a003;

提前感谢

Shalini

e2e.ti.com/.../6562.main.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    团队将收到通知。 他们将直接在此处发布反馈。

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

    我最近注意到、EMATC2寄存器:ERRSTAT 设置为1信号总线错误、ERRDET 0x00011a01即读取寻址错误。

    请也考虑这些寄存器设置。

    提前感谢

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

    我已经检查了源地址。 它只是程序中数组的地址。 访问此寄存器有什么困难?
    为什么会发生读取寻址错误?

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

    请发表回复。 我被卡住了...

    提前感谢

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

    您好、Shalini、

    如果 ERRDET 指示读取寻址错误、则我怀疑您的读取地址位于无效空间。 有关非法地址或保留地址、请参阅下面链接的 C6748数据表中的存储器映射摘要(表3-4)。 最好也在参数中共享十六进制值。

    需要考虑的其他几点:

    [引用用户="AAAA PPPPP"]

    paramSet1.linkAddr = 0x01e34220;

    [/报价]

    将32位值放入16位字段中。 编译器应该处理它、但这是需要考虑的问题。

    [引用用户="AAAA PPPPP"]

    paramSet1.op=0x0011a003;

    [/报价]

    这表示设置了 opt.SAM 和 opt.dam 位。 这些应为0、因此将其更改为 0x0011a000。

    此外、这里还有一些 EDMA 资源、如果您不知道这些资源、这些资源可能对您有用。

    C6748器件的 EDMA 常见问题解答:

    C6000 EDMA 培训系列:

    《C6748 EDMA 用户指南》:

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

    谢谢您的回答。但我的问题仍然存在。

    "如果 ERRDET 指示读取寻址错误、则我怀疑您的读取地址位于无效空间。 "

    我刚才给出了程序中变量的地址。 它们按程序分配地址。 我还检查了分配的地址。
    目的= 0x11806a00
    源= 0x00f00300。
    这些地址无效。

    "您要将一个32位值放入一个16位字段中。 编译器应该处理它、但这是需要考虑的问题。"

    我的链接地址是32位。 我如何将其输入到16位变量中。 只提供低16字节是否正常?

    "这表示设置了 opt.SAM 和 opt.dam 位。 这些应为0、因此将其更改为0x0011a000。"
    我计划从常量存储器移动到另一个常量存储器。 因此、它被指定为11、而不是在增量模式中。

    我的问题仍然存在。 不要认为这已经解决了。

    提前感谢

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

    您好、Shalini、

    我认为您的源地址可能是问题所在。 查看存储器映射表、EDMA 无法访问该地址空间。

    EDMA 只能使用从0x11F00000开始的全局地址范围来访问 DSP L1D RAM:

    因此、我认为您需要将源地址更改为 0x11f00300。

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

    非常感谢您解决了我的问题。

    相关信息
    Shalini