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.

[参考译文] TMS320F28388D:初始化 DMA 以通过 CLB 中断从 CLB FIFO 传输字词

Guru**** 2524550 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1067684/tms320f28388d-init-dma-to-transfer-words-from-clb-fifo-with-clb-interrupt

部件号:TMS320F28388D

大家好!

我认为我的 DMA 设置有问题。

我使用 CLB counter0(C0)作为移位寄存器,当 C0接收到32位数据时,HLC 会将该数据推送到 fifo。 然后当 fifo 有4个单词(32位)时,HLC 触发 int。 这一部分正在运行,我调试了,CPU 会中断。

我想用这种中断触发 DMA,以便在五分之三的时间向内存中写入4个字(32位)数据,每次突发。 但是,我不能让代码起作用。 我在传输结束时收到 DMA 中断,但数据没有 传输到内存。 我不确定是内存访问问题还是初始化问题。 我的初始化代码如下。 有人能帮我解决这个问题吗? 请将此作为荷。

谢谢,

//
// Defines
//
#define FIFO_LVL    8               // FIFO interrupt level
#define BURST       FIFO_LVL        // Each burst will empty the FIFO
#define TRANSFER    16              // It will take 16 bursts of 8 to transfer
#define SIZE        (TRANSFER * BURST)

uint32_t r2Data[SIZE];                // Receive data buffer

#pragma DATA_SECTION(r2Data, "ramgs1");


void initDMA()
{
    //
    // Initialize DMA
    //
    DMA_initController();


    DMA_configAddresses(DMA_CH4_BASE, r2Data,
                        (uint32_t *)(CLB1_BASE + CLB_DATAEXCH));
    DMA_configBurst(DMA_CH4_BASE, BURST, 1, 1);
    DMA_configTransfer(DMA_CH4_BASE, TRANSFER, 0, 1);
    DMA_configMode(DMA_CH4_BASE, DMA_TRIGGER_CLB1INT, DMA_CFG_ONESHOT_DISABLE |
                   DMA_CFG_CONTINUOUS_DISABLE | DMA_CFG_SIZE_32BIT);

    DMA_enableTrigger(DMA_CH4_BASE);
    DMA_setInterruptMode(DMA_CH4_BASE, DMA_INT_AT_END);
    DMA_enableInterrupt(DMA_CH4_BASE);
}

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

    我认为 DMA 无法访问 FIFO。

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

    谢谢。 我乔斯特在正确阅读 TRM 后也注意到了这一点。