|
以前做的ADuCM360的ADC,发现除了ADC的处理时间外,如果进行下一次ADC,还要对某些寄存器进行设置。这样连续转换时的处理速度就比较慢。
再者,ADI的例程为了提高可读性,就象C++中的“封装”概念一样,将函数做得有些烦琐,并存在些判断(判断语句对执行时间影响也是比较大的),这样整体的速度不容乐观。
下面是我根据ADI例程,减了又减的程序段,从中可以看到对寄存器的重新占了不少时间:
for (ucCounter = 0; ucCounter < DMASIZE; ucCounter++) // Accumulate 16x ADC1 readings from DMA destination
{
Adc0Avg += (float)uxADC0Data[ucCounter];
}
DmaClr(DMARMSKCLR_ADC0,0,0,0); // enables ADC0DMA channel, Clear Masking of ADC0 DMA channel
DmaCycleCntCtrl(ADC0_C,
DMASIZE,
DMA_DSTINC_WORD|DMA_SRCINC_NO|DMA_SIZE_WORD|DMA_BASIC); // Update cycle control and number of values to transfer fields
AdcGo(pADC0,ADCMDE_ADCMD_CONT); // Start ADC0 for continuous conversions
ADC采用中断方式。DMA传输
|
|