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.

[参考译文] TM4C1294NCPDT:TM4C1294NCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/784848/tm4c1294ncpdt-tm4c1294ncpdt

器件型号:TM4C1294NCPDT

大家好、
我检查了几个资源并查看了论坛、但找不到任何实质性的解决方案来解决我的问题。 我有2个传感器、它们位于 PE2和 PE1上。 我正在尝试使用 ADC 同时从这两个寄存器中读取数据。 但我为这两个值都获得相同的值。 不确定我下面的行为是什么。
提前感谢。

SysCtlPeripheralEnable (SYSCTL_Periph_ADC1);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);

GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_2);
GPIOPinTypeADC (GPIO_Porte _BASE、 GPIO_PIN_1);

ADCSequenceConfigure (ADC1_BASE、0、ADC_TRIGGER_PROCESSOR、0);
ADCSequenceConfigure (ADC1_base、1、ADC_TRIGGER_PROCESSOR, 1);

ADCSequenceStepConfigure (ADC1_base、 0、0、ADC_CTL_CH2);//PE2->AIN1
ADCSequenceStepConfigure (ADC1_BASE、0、 1、ADC_CTL_CH2);
ADCSequenceStepConfigure (ADC1_BASE、0、2、 ADC_CTL_CH2);
ADCSequenceStepConfigure (ADC1_base、0、3、
ADC_CTL_CH2 | ADC_CTL_IE | ADC_CTL_END);

ADCSequenceStepConfigure (ADC1_base、1、0、ADC_CTL_CH1); //PE1->AIN2
ADCSequenceStepConfigure (ADC1_BASE、1、1、ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC1_BASE、 1、2、ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC1_BASE、1、 3、
ADC_CTL_CH1 | ADC_CTL_IE | ADC_CTL_END);

ADCSequenceEnable (ADC1_base、0);
ADCSequenceEnable (ADC1_base、1);
ADCIntClear (ADC1_BASE、0);
ADCIntClear (ADC1_BASE、1);

ADCProcessorTrigger (ADC1_BASE、 0);
while (!ADCIntStatus (ADC1_base、0、false)
{
}
ADCIntClear (ADC1_base、0);

ADCSequenceDataGet (ADC1_base、0、reading1);

ADCProcessorTrigger (ADC1_base、1);
while (!ADCIntStatus (ADC1_base、1、false)
{
}
ADCIntClear (ADC1_base、1);
ADCSequenceDataGet (ADC1_base、1、reading2); 

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

    1.您应在下面更改

    发件人:
    GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_2);
    GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_1);

    至:
    GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_2|GPIO_PIN_1);


    2.您为什么要执行以下操作? 在将 AIN2映射为四个步长(0、1、2、3)时、您是否确实希望对 AIN2 (ADC_CTL_CH2)进行4次采样? 如果这确实是您想要的、那么没关系。 否则、您应更改为下面的。 另请注意、您的评论是错误的。 ADC_CTL_CH2是 AIN2、即 PE1。 确保要将哪个 AIN 分配给哪个步骤和哪个序列发生器。

    发件人:
    ADCSequenceStepConfigure (ADC1_base、0、0、ADC_CTL_CH2);//PE2->AIN1
    ADCSequenceStepConfigure (ADC1_base、0、1、ADC_CTL_CH2);
    ADCSequenceStepConfigure (ADC1_base、0、2、ADC_CTL_CH2);
    ADCSequenceStepConfigure (ADC1_BASE、0、3、
    ADC_CTL_CH2 | ADC_CTL_IE | ADC_CTL_END);

    至:
    ADCSequenceStepConfigure (ADC1_base、0、0、ADC_CTL_CH2 | ADC_CTL_IE | ADC_CTL_END);

    3、ADC 只能按顺序对 AIN1和 AIN2采样、即使您将这两个输入分配给了两个不同的序列发生器也是如此。 如果您真的希望使用公共触发器完全同时对 AIN1和 AIN2进行采样、则需要将这两个输入分配给两个不同的 ADC 模块、例如一个分配给 ADC0_BASE、另一个分配给 ADC1_BASE。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    感谢您的回答。 我不需要采样4次。 因此、我可以使用 SS3。 我要做的是。 我有两个连接 AIN1和 AIN2的传感器。 传感器应提供单独的读数。 它们与彼此的读数无关。 我希望能够使用 相同的触发器读取它们的值。 那么、我可以这么做吗? 读取 AIN1并清除中断、然后再次触发中断并从 AIN2读取? 这是否会使读数(FIFO)混乱? 请参阅以下代码。 如果这不起作用。 您能否为您的#3建议粘贴示例代码?

    GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_2 | GPIO_PIN_1);
    
    ADCSequenceConfigure (ADC1_base、0、ADC_TRIGGER_PROCESSOR、0);
    ADCSequenceConfigure (ADC1_base、1、ADC_TRIGGER_PROCESSOR, 1);
    
    ADCSequenceStepConfigure (ADC1_base、 0、0、
    ADC_CTL_CH1 | ADC_CTL_IE | ADC_CTL_END);//PE2->AIN1
    
    ADCSequenceStepConfigure (ADC1_base、1、0、
    ADC_CTL_CH2 | ADC_CTL_IE | ADC_CTL_END);//PE1->AIN2
    
    ADCSequenceEnable (ADC1_BASE、0);
    ADCSequenceEnable (ADC1_BASE、1);
    ADCIntClear (ADC1_BASE、0);
    ADCIntClear (ADC1_BASE、1);
    
    
    ADCProcessorTrigger (ADC1_BASE、0);//针对 AIN1读数触发
    while (!ADCIntStatus (ADC1_base、0、false))
    {
    }
    ADCIntClear (ADC1_base、0);//清除标志
    
    ADCSequenceDataGet (ADC1_base、0、reading1);//读取 AIN1
    
    ADCProcessorTrigger (ADC1_base、1);//针对 AIN2读数的 RE 触发
    while (!ADCIntStatus (ADC1_base、1、false))
    {
    }
    ADCIntClear (ADC1_BASE、1);//清除标志
    ADCSequenceDataGet (ADC1_base、1、reading2);
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我看不到您的方法有问题。 您应该能够读取两个传感器输入。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!
    那么、使用上面的代码、我可以从(AIN1和 AIN2)引脚读取两个不同的传感器值吗? 这样、读数不会混合、因为我对这两个读数都使用 ADC1_base? 采样 序列0和1用于 AIN1和 AIN2?

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Veruma、
    没错。 如果需要、甚至可以将 AIN1/AIN2放置在同一序列发生器中。 它们在同一序列发生器中成为两个不同的步骤。 它们的读数不会相互干扰。 只需查看支持8个步骤的序列发生器0。 为什么要执行8个步骤? 这是为了允许序列发生器0对8个不同的输入进行采样。 8个采样后、每个转换后的值都可以从 FIFO 中读出。 只有两个输入时也是如此。 有关详细信息、请参阅数据表。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢您的澄清、Charles。