This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1233H6PGE:用于2MHz 自动采样的 ADC 设置、在没有 uC 复位的情况下无法返回到单次采样

Guru**** 2329980 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/588557/tm4c1233h6pge-adc-setup-for-2mhz-automatic-sampling-cannot-be-returned-to-single-sampling-without-uc-reset

器件型号:TM4C1233H6PGE

2MHz 设置:

   ADCSequenceDisable (ADC1_base、 1);
   ADCSequenceDisable (ADC0_BASE、 1);
   IntDisable (INT_ADC1SS1);
   IntDisable (INT_ADC0SS1);
   uDMAChannelDisable (UDMA_CH15_ADC0_1);
   uDMAChannelDisable (UDMA_CH25_ADC1_1);
   uint32_t dummyStorage[4];
   SysCtlPeripheralDisable (SYSCTL_Periph_UDMA); //清除之前的 ADC 设置
   ADCIntClear (ADC0_BASE 、1);
   ADCIntClear (ADC1_BASE 、1);
   ADCSequenceStepConfigure (ADC0_BASE、 1、 3、ADC_CTL_CH0);
   ADCSequenceStepConfigure (ADC1_base、 1、 3、ADC_CTL_CH0);
   ADCProcessorTrigger (ADC0_BASE、 1);
   ADCProcessorTrigger (ADC1_base、 1);
   ADCSequenceConfigure (ADC0_BASE、 1、ADC_TRIGGER_PROCESSOR、 0);
   ADCSequenceConfigure (ADC1_base、 1、ADC_TRIGGER_PROCESSOR、 0);
   ADCPhaseDelaySet (ADC1_base、ADC_PHASE_0);
   ADCSequenceDataGet (ADC0_BASE、 1、dummyStorage);
   ADCSequenceDataGet (ADC1_base、 1、dummyStorage);
之后、我尝试将设置更改为:
ADCSequenceStepConfigure (ADC1_BASE、 0、 0、AINPort | ADC_CTL_END | ADC_CTL_IE);
ADCSequenceEnable (ADC1_BASE、 0);                                                                 //启用 ADC 序列发生器
ADCIntClear (ADC1_BASE 、0);
ADCSequenceConfigure (ADC1_base、 0、ADC_TRIGGER_PROCESSOR、 0);
ADCProcessorTrigger (ADC1_base、 0);
while (!ADCIntStatus (ADC1_base、 0、 false)){}
ADCSequenceDataGet (ADC1_base、 0、adcVoltage);
返回 adcVoltage;

但这会在 while 环路中挂起。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好 Anthony

    请附上完整的代码吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Anthony Levine1"]

    2MHz 设置:

       ADCSequenceDisable (ADC1_base、 1);
       ADCSequenceDisable (ADC0_BASE、 1);
       IntDisable (INT_ADC1SS1);
       IntDisable (INT_ADC0SS1);
       uDMAChannelDisable (UDMA_CH15_ADC0_1);
       uDMAChannelDisable (UDMA_CH25_ADC1_1);
       uint32_t dummyStorage[4];
       SysCtlPeripheralDisable (SYSCTL_Periph_UDMA); //清除之前的 ADC 设置
       ADCIntClear (ADC0_BASE 、1);
       ADCIntClear (ADC1_BASE 、1);
       ADCSequenceStepConfigure (ADC0_BASE、 1、 3、ADC_CTL_CH0);
       ADCSequenceStepConfigure (ADC1_base、 1、 3、ADC_CTL_CH0);
       ADCProcessorTrigger (ADC0_BASE、 1);
       ADCProcessorTrigger (ADC1_base、 1);
       ADCSequenceConfigure (ADC0_BASE、 1、ADC_TRIGGER_PROCESSOR、 0);
       ADCSequenceConfigure (ADC1_base、 1、ADC_TRIGGER_PROCESSOR、 0);
       ADCPhaseDelaySet (ADC1_base、ADC_PHASE_0);
       ADCSequenceDataGet (ADC0_BASE、 1、dummyStorage);
       ADCSequenceDataGet (ADC1_base、 1、dummyStorage);

    [/报价]

    请注意前2行(突出显示)。

    您的"2MHz、自动采样"代码块是否正常工作(即 不使用(曾经)调用"ADCSequenceEnable( )?")     (不显示此类调用-您(顶部)显示的代码块!)

    至于器件多路复用器(您的"在期间挂机")、您的代码函数序列与我公司的(和供应商代码示例)不同-是这样吗?

    请注意-正如 Amit 所说的那样-切勿向您展示您的、"GPIOPinConfig()和 GPIOPinType()"都是必需的。  (因此,我们被迫相信/希望----你把它们正确了。)

    呈现(下面)一个 ADC 序列-与供应商代码示例兼容-这些示例"适合我们" -部署到我们的 LX4F231 MCU 板时。

    ADCSequenceDisable ()  //请注意,您(正确)在“上部”代码块上使用了它,然后忽略了它的使用,而忽略了它的底部(悬挂)代码块。  始终明智地在"Config!"之前"禁用"

    ADCSequenceConfigure()

    ADCSequenceStepConfigure()

    ADCSequenceEnable()

    ADCIntClear ()

    现在到达一个程序循环-旨在提供连续 ADC 转换:

    ADCProcessorTrigger()

    while (!ADCIntStatus (ADC1_base、 0、 false)){}  //与您完全一样!

    ADCIntClear ()

    ADCSequenceDataGet ()

    再次-我们注意到没有坑!