请问有什么方法可以重置DMA的存储基地址?

2019-08-17 01:01发布

请问,我现在用dma进行乒乓的方式,有没有办法在切换数组的时候令存储基地址重置,即每次且换数组都是从0开始读数据。谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
ljjdglg520
2019-08-17 20:49
回复【6楼】正点原子:
---------------------------------

换基地址后要把DMA关了再打开才从0开始吧?我测试是这样的,也可能是我自己的问题,我现在每次切换基地址都要把DCMI和DMA关了再开,这样就很慢。我想用乒乓的模式,但是我这样写,切换不了数组: 

DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)JpegBuffer2; 
DMA_Init(DMA2_Stream1, &DMA_InitStructure); 

每次都要这样写: 

                       DMA_DeInit(DMA2_Stream1); 
DMA_InitStructure.DMA_Channel = DMA_Channel_1;   
DMA_InitStructure.DMA_PeripheralBaseAddr = DCMI_DR_ADDRESS; 
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)JpegBuffer2;    
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; 
DMA_InitStructure.DMA_BufferSize = 1024*32;   
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; 
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; 
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; 
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; 
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; 
DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; 
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable;         
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; 
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; 
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; 
DMA_Init(DMA2_Stream1, &DMA_InitStructure); 

每次这样初始化切换就很慢了...调了3个多星期快一个月了,DCMI的连续采集模式弄了好久,总是一个数组里的第二张图片出问题,第一张是正常输出的,之后一直有数据输出,但是没有图片,然后我用快照模式+上面乒乓的方式输出,用115200的波特率输出只有0.5帧。。。要崩溃了。。。

一周热门 更多>