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.

[参考译文] RTOS/TMS320C5534:DSP/BIOS DMA HWI 支持

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/662373/rtos-tms320c5534-dsp-bios-dma-hwi-support

器件型号:TMS320C5534

工具/软件:TI-RTOS

您好!

我尝试使用 DSP/BIOS、DPS/BIOS 5.42、CSL 3.08和 CCS7 (Linux)启用 DMA HWI。

我几乎检查了所有内容+浏览了论坛、基本上我无法使 DMA 生成中断。

重要提示:我目前正在尝试内存到内存 DMA 传输、而不是 IO (尚未...)

因此,基本上,HWI 在.cfg 文件中被正确定义:

VAR HwiDMA = bios.HWI.instance("HWI_INT8");
hwiDMA["fxn"]= prog.extern ("DMA_HWI");
HwiDMA.useDispatcher = 1;
bios.HWI_INT8.interruptMask0 ="自";
bios.HWI_INT8.interruptMask1 ="自";    

使用调试器(ezDSPC55板)运行时、我可以看到:

-所有 DMA 配置寄存器都包含合理的值(使用 DMA0CHO)。

dma0ch0tcr2具有 EN 和 INTEN 集

DMAIER 设置了所有位

-正确设置地址和长度参数。

如果我在 dispatcher_isr8地址放置一个 BP,我永远不会在那里停止,尽管我已验证计时器(由 RTOS 使用)调度程序是否正确步进。

除调试器之外、我还检查了 IPVD 寄存器是否为矢量保留了正确的地址。 INTM 位被禁用.... 但我认为这是因为调试器已停止(我是对的吗?)。 无论如何、DSP/BIOS 调度程序应该处理这个问题(来自 doc ..)。

因此、基本而言、我无法确定要检查的其他内容。 此外、我正在尽可能使用 CSL 代码、我还深入探讨了它、一点也不奇怪。

我的代码在主代码中初始化 DMA、但保留 INT (DMAEVENT)禁用。 然后,在我的任务中,我启用 DMA 中断(   IRQ_ENABLE (DMA_EVENT);)并执行一个 DMA_START()....

 

有没有人建议我会犯什么错误?

谢谢、

Jacques

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

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、经过很多测试后、我想我得到它。
    这里的关键在于、我使用 CSL 来访问和处理 DMA、因此序列是:

    dma_init --> dma_open --> dma_config --> dma_start

    DMA_open 被赋予一个到 CSL_DMA_ChannelObj 的 ptr。 它将返回一个句柄,稍后将由 dma_config、dam_Start 等使用... 此句柄是之前 CSL_DMA_ChannelObj 的地址,因此,如果启动在另一个范围:(
    在我的情况下,句柄是全局的... 但 channelObj 是我的 init 函数的局部变量、从 Main 调用。
    当 dma_start 在任务上下文中完成时,句柄指向垃圾:)

    修复所有这些操作后,重新组织代码位,中断开始触发:)