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.

[参考译文] TMS320F28069:用 DMA 清除跳闸区标志

Guru**** 2551110 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1051751/tms320f28069-clearing-trip-zone-flags-with-dma

器件型号:TMS320F28069

由于 DMA 应该能够访问 ePWM 寄存器、我假设我可以使用 DMA 在 CTR=0时清除逐周期跳闸标志。 我设置 DMA、使用 L5-L8存储器中的静态全局作为源、并尝试使用 EPwm4Regs.TZCLR 作为源、但这不会清除标志。 我检查了以下事项:

-当通过软件将全局变量写入 TZCLR 时、标志会按预期清零

-当写入 L5-L8 RAM 中的目标时、DMA 会按预期复制全局变量

我不知道还能检查什么。 它可能与受 EALLOW 保护的 TZCLR 寄存器有关? 有人知道这里会发生什么错误? 我使用如下功能设置通道:

int16 CopyNextCycle(Uint32 Src, Uint32 Dst, Uint16 Size)
{
    Uint16 ChNr = 0;
    while (ChannelsInUse[ChNr])
    {
        ChNr++;
        if (ChNr > 5) {
            return 1;
        }
    }
    ChannelsInUse[ChNr] = 1;

    GET_REG_LOCK;
    ChannelPtr[ChNr]->MODE.all = 0;
    ChannelPtr[ChNr]->MODE.bit.CONTINUOUS = 0;
    ChannelPtr[ChNr]->MODE.bit.PERINTE = 1;
    ChannelPtr[ChNr]->MODE.bit.PERINTSEL = 18;  // Triggered by PWM module 2 SoC A
    ChannelPtr[ChNr]->MODE.bit.CHINTE = 1;      // Generate interrupt (to mark channel as 'not anymore in use')
    ChannelPtr[ChNr]->MODE.bit.CHINTMODE = 1;   // Generate interrupt at end of transfer

    ChannelPtr[ChNr]->BURST_SIZE.all = Size;
    ChannelPtr[ChNr]->SRC_BURST_STEP = 1;
    ChannelPtr[ChNr]->DST_BURST_STEP = 1;
    ChannelPtr[ChNr]->TRANSFER_SIZE = 1;
    ChannelPtr[ChNr]->SRC_ADDR_SHADOW = Src;
    ChannelPtr[ChNr]->DST_ADDR_SHADOW = Dst;

    ChannelPtr[ChNr]->CONTROL.all = 0;
    ChannelPtr[ChNr]->CONTROL.bit.RUN = 1;
    RELEASE_REG_LOCK;

    return 0;
}

然后、我调用此函数、将静态变量作为源、并将 TZCLR 寄存器作为目标、如下所示:

CopyNextCycle((Uint32)&CbCTripFlagClear, (Uint32)&(EPwm4Regs.TZCLR), 1);

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

    经过进一步调查、我发现下图:

    但是、我无法找到配置此多路复用器的位置。 这可能会导致问题?

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

    TI 再次在 TRM 中很好地隐藏了重要的东西。 好的、它在那里、但是只有当你现在必须搜索解释性很好的寄存器名称'EPWMCFG'(一个字母中不包含 DMA 或 CLA 的字符串)时、你才会找到它。 唉、我不可能实现我想要的、因为我已经从 CLA 代码内访问了 ePWM 模块: