请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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);

