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