工具与软件:
您好、专家
我要测试 DMA 块。
我使用3个 DMA 通道。
我的源地址相同。 (名称为"fsiRxDataBuf");
我 可以从 fsiRxDataBuf 获取 CPU1_FSI_PACKETS_RX。
但 CPU1_FSI_PACKETS_RX2和 CPU1_FSI_PACKETS_RX3缓冲器无效。
我需要选择我的 dest 缓冲区。
我是否可以使用 DMA 更改最小缓冲区?
感谢您的阅读。
TypeNumFSI = frameDataRX[0]和0x0F00;
Switch (TypeNumFSI){
情况0x0000:
dma_startChannel (dma_ch1_base);
DMA_forcestrigger (DMA_CH1_base);
休息;
案例0x0100:
dma_startChannel (dma_ch2_base);
DMA_forcestrigger (DMA_CH2_base);
休息;
案例0x0200:
dma_startChannel (DMA_CH3_BASE);
DMA_forcestrigger (DMA_CH3_BASE);
休息;
}
我的初始代码为:
void initDMA1 (void)
{
DMA_ConfigParams transfParams;
const void *destAddr;
const void * srcAddr;
srcAddr =(const void *) fsiRxDataBuf;
destAddr =(const void *) CPU1_FSI_PACKETS_RX;
//
//配置 DMA CH1
//
transfParams.transferTrigger = DMA_TRIGGER_SOFTWARE;
transfParams.interruptMode = DMA_INT_AT_END;
transfParams.enableInterrupt = 1;
transfParams.configSize = DMA_CFG_SIZE_16BIT;
transfParams.transferMode = DMA_CFG_Oneshot_disable;
transfParams.reinitMode = DMA_CFG_CONTINUOUS_DISABLE;
transfParams.burstSize = 8;
transfParams.transferSize = 6;//48/8
transfParams.srcWrapSize = 0xFFFF;
transfParams.destWrapSize = 0xFFFF;
transfParams.destAddr =(uint32_t) destAddr;
transfParams.srcAddr =(uint32_t) srcAddr;
transfParams.srcBurstStep = 1;
transfParams.destBurstStep = 1;
transfParams.srcTransferStep = 1;
transfParams.destTransferStep = 1;
transfParams.srcWrapStep = 0;
transfParams.destWrapStep = 0;
DMA_configChannel (DMA_CH1_BASE、&transfParams);
}
void initDMA2 (void)
{
DMA_ConfigParams transfParams;
const void *destAddr;
const void * srcAddr;
srcAddr =(const void *) fsiRxDataBuf;
destAddr =(const void *) CPU1_FSI_PACKETS_RX2;
//
//配置 DMA CH2
//
transfParams.transferTrigger = DMA_TRIGGER_SOFTWARE;
transfParams.interruptMode = DMA_INT_AT_END;
transfParams.enableInterrupt = 1;
transfParams.configSize = DMA_CFG_SIZE_16BIT;
transfParams.transferMode = DMA_CFG_Oneshot_disable;
transfParams.reinitMode = DMA_CFG_CONTINUOUS_DISABLE;
transfParams.burstSize = 8;
transfParams.transferSize = 6;//48/8
transfParams.srcWrapSize = 0xFFFF;
transfParams.destWrapSize = 0xFFFF;
transfParams.destAddr =(uint32_t) destAddr;
transfParams.srcAddr =(uint32_t) srcAddr;
transfParams.srcBurstStep = 1;
transfParams.destBurstStep = 1;
transfParams.srcTransferStep = 1;
transfParams.destTransferStep = 1;
transfParams.srcWrapStep = 0;
transfParams.destWrapStep = 0;
DMA_configChannel (DMA_CH2_base、&transfParams);
}
void initDMA3 (void)
{
DMA_ConfigParams transfParams;
const void *destAddr;
const void * srcAddr;
srcAddr =(const void *) fsiRxDataBuf;
destAddr =(const void *) CPU1_FSI_PACKETS_RX3;
//
//配置 DMA CH3
//
transfParams.transferTrigger = DMA_TRIGGER_SOFTWARE;
transfParams.interruptMode = DMA_INT_AT_END;
transfParams.enableInterrupt = 1;
transfParams.configSize = DMA_CFG_SIZE_16BIT;
transfParams.transferMode = DMA_CFG_Oneshot_disable;
transfParams.reinitMode = DMA_CFG_CONTINUOUS_DISABLE;
transfParams.burstSize = 8;
transfParams.transferSize = 6;//48/8
transfParams.srcWrapSize = 0xFFFF;
transfParams.destWrapSize = 0xFFFF;
transfParams.destAddr =(uint32_t) destAddr;
transfParams.srcAddr =(uint32_t) srcAddr;
transfParams.srcBurstStep = 1;
transfParams.destBurstStep = 1;
transfParams.srcTransferStep = 1;
transfParams.destTransferStep = 1;
transfParams.srcWrapStep = 0;
transfParams.destWrapStep = 0;
DMA_configChannel (DMA_CH3_BASE、&transfParams);
}