|
void dma_init(void)
{
DMA_InitTypeDef DMA_InitStructure;
ADC_DMACmd(ADC1, DISABLE);
DMA_Cmd(DMA1_Channel1, DISABLE);
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = BASE_Address; u32[]
DMA_InitStructure.DMA_MemoryBaseAddr = BASE_DATA; u32[]
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 2048;
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_Word;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
DMA_ITConfig(DMA1_Channel1, DMA1_IT_TC1, ENABLE); // DMA传输完成中断
DMA_ITConfig(DMA1_Channel1, DMA1_IT_HT1, ENABLE); // DMA过半完成中断
ADC_DMACmd(ADC1, ENABLE);
DMA_Cmd(DMA1_Channel1, ENABLE);
}
如上的程序,很容易理解,没什么难的。我不明白的地方是DMA的中断周期是如何计算的。
实测DMA传输完成中断周期是40ms , DMA过半完成中断周期是20ms 。
如果要计算的话,怎么样计算才能得到DMA传输完成/半完成中断的周期呢?
非常感谢。
|
|