您好!
我将 在 F28388D 上运行多个严格控制环路、并并行使用 CPU1、CPU1.CLA、CPU2和 CPU2.CLA。 我需要使用 CPU1.DMA 将数据从 CPU2toCPU1MsgRAM 移动到 CPU1.CLA。 我已经配置 CPU1.DMA、以将数据从 CPU2to CPU1MsgRAM 移动到 DMAtoCLAMsgRAM。 我想在 CPU2主代码上使用软件强制 PWM16.SOCA 事件来触发 CPU1.DMA 传输、但无法使其正常工作。 我完成了涉及 dma_shared_peripheral 示例的以下步骤:
设置 CPU1.DMA:
//初始化 DMA
//
DMAInitialize();
DMADest =&Iiref_cc;
DMASsource =&II_ref_21;// CPU2的 CMPA 值位置
EALLOW;
//
//设置源地址:
//
DMARegs.CH2.SRC_EGEP_ADDR_SHANDBY =(UINT32) DMASource;//指向
//开始
//源缓冲器
DMARegs.CH2.SRC_ADDR_SHADEP =(UINT32) DMASource;
//
//设置目标地址:
//
DmaRegs.CH2.dst_beg_ADDR_shadow =(UINT32) DMADest;//指向
//开始
//目的缓冲区
DmaRegs.CH2.dst_ADDR_shadow =(UINT32) DMADest;
EDIS;
DMACH2BurstConfig (1、1、1);//设置突发寄存器
DMACH2TransferConfig (1、1、1);//设置传输寄存器
DMACH2WrapConfig (0xFFFF、0、0xFFFF、0);
DMACH2ModeConfig (66、PERINT_ENABLE、Oneshot_disable、CONT_ENABLE、
SYNC_DISABLE、SYNC_SRC、OVRFLOW_DISABLE、三十位_BIT、
CHINT_END、CHINT_DISABLE);
EALLOW;
DmaRegs.CH2.control.bit.run = 1;
EDIS;
2.将 PWM16的所有权转让给 CPU2:
DevCfgRegs.CPUSEL0.bit.EPWM16 = 1;
3.在 CPU2上配置 PWM16的 SOCA
//设置 EPWM16.SOCA 事件
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;
CpuSysRegs.PCLKCR2.bit.EPWM16 = 1;
EPwm16Regs.ETSEL.bit.SOCAEN=1;
EDIS;
4.在 ISR 内对 CPU2强制执行 PWM16.SOCA 事件
EALLOW;
EPwm16Regs.ETFRC.bit.SOCA=1;
EDIS;
当我在 CPU2上运行代码时、CPU1.DMA 传输不会触发、但如果我 使用 CPU1上的 DmaRegs.CH2.CONTROL.bit.PERINTFRC 强制进行 DMA 传输、则数据传输成功。 这意味着没有生成 PWM16.SOCA 或 CPU1.DMA 触发设置不正确。 我无法找到问题。 非常感谢您对此问题的建议。
谢谢