请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
您好,
如何计算所有信道的总转换时间。 我的计算结果就是这样。
AD10OSC = 5mhz,
分禾器= 2,
采样=16周期,
转换= 13个周期,
从A5到a0有6个通道。
所以我的计算就是这样。
1周期= 1/5mhz (div2)= 1/2.5MHz = 0.4us
一个通道的总转换完成时间= 1个周期*(16 +13)= 29个周期= 2.4us
对于所有信道,29 * 6 = 174个周期= 69.6us,因此DMAISR将在每个69.6us之后触发。
我的计算正确吗?
代码如下所示。
void ADC_INIT (void)
{
ADC10_a_init (ADC10_a_base,
ADC10_A_SAMPLEHOLDSOURCE_SC,
ADC10_A_CLOCKSOURCE_ADC10OSC,
ADC10_A_CLOCKDIVIDER_2);
ADC10_A_ENABLE (ADC10_A_BASE);
ADC10_A_setupSamplingTimer(ADC10_a_base,
ADC10_A_CYCLEHOLD_16_CYCLES,
ADC10_A_MULTIPLESAMPLESENABLE);
ADC10_A_configureMemory (ADC10_a_base,
ADC10_A_Input_A5,
ADC10_A_VREFPOS_AVCC,
ADC10_A_VREFNEG_AVSS);
//初始化和设置DMA通道0
dma_initParam参数={0};
param.channelSelect = dma_channel_0;
Param.transferModeSelect = dma_transfer_altered_single;
Param.transferSize =6;
PARAM.TriggerSourceSelect = DMA_TRIGGERSOURCE_24;//ADC10中断标志
Param.transferUnitSelect = DMA_Size_SRCWORD_DSTWORD;
Param.triggerTypeSelect = DMA_TRIGG_RISINGEDGE;
dma_init(¶m);
dma_setSrcAddress(DMA_channel_0,
ADC10_a_getMemoryAddressForDMA(ADC10_a_base),
DMA_Direction_Unchanged);
dma_setDstAddress(DMA_channel_0,
(UINT32_t) ADC_TABLE,
DMA_Direction_Increment);
//启用DMA通道0中断
DMA_clearInterrupt (DMA_CHANGE_0);
dma_enableInterrupt (dma_channel_0);
//在DMA通道0上启用传输
dma_enableTransfers(DMA_channel_0);
ADC10_a_startConversion (ADC10_a_base,ADC10_a_SEQOFCHANNELS);
}