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.

[参考译文] TM4C129ENCPDT:读取多个引脚 ADC0

Guru**** 2449140 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/624406/tm4c129encpdt-read-multiple-pins-adc0

器件型号:TM4C129ENCPDT

大家好、

我尝试使用 tm4c129在多个引脚中读取模拟值、但我始终得到零。

可以帮帮我吗?

我的代码是 attached.e2e.ti.com/.../adc.c

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

    我建议您后退一步、而是让单个 ADC 正常工作。

    请从 TivaWare 随附的 TI 示例代码开始、该代码可在[安装路径]\TivaWare_C_Series-2.1.4.178\examples\peripherals\ADC 中找到

    使用此代码、设置单个 ADC 引脚/通道、并努力获得正确的单次读取。 完成此操作后、您可以展开以使用多个引脚。

    如果您在获取 TI 示例代码的奇异读取时遇到问题、请返回报告、其中包括修改示例代码所采取的步骤、所面临的挑战以及提供完整源代码(包括 main()函数和器件的任何初始化)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    同意供应商对"简单性"的处方并遵循(已知合格)示例代码。   (这种简单性最好通过始终难忘"亲吻"(供应商代理商从未使用过)来传达-因此(反复)海报问题由于不必要的复杂性而"总是"!)

    挂图未能正确遵循"SW_TM4C-DRL-UG-2"(外设驱动程序用户指南)、被误解或未正确遵循。   他对 ADC 函数的使用虽然是"原始的"、但通常与这些 API 函数不兼容。   具体而言:

    • 海报(基本上注释了序言部分的叙述)"似乎"表明选择了"顺序3"。  (通过一步生成单次转换)   

    但是海报代码:  ADCSequenceStepConfigure (ADC0_BASE、0、0、ADC_CTL_CH1);  实际上已选择序列0。   (可产生多达8个步进转换)

    • 然而、这就是"冰山一角"-海报的代码尝试在序列0中安装11个步骤!   (同样、8是允许的最大值)
    • 海报的代码启用了 ADC0 -但显示未启用(其中一个)他选择的(包含 ADC)端口-"D & E"  (如果该代码为"其他"-我们"帮助者"如何指导/建议?)
    • 海报的代码继续-并启用序列0 - 10。   HIS 注释掉的代码前导码(指令)状态(仅限)序列0-3有效。
    • 变量"序列"至少用于3个函数调用-但未定义。
    • 海报的代码描述:"每个具有输入端口 D 的引脚都具有 ADC 功能!"   (虽然(可能)是真的-海报是否真的得到了确认?)  并非所有 MCU 引脚可用作 ADC - MCU 手册详细信息。

    示例代码"Single_end.C"(找到的示例/外设)久经考验-说明了正确的函数顺序。   与外设驱动程序用户指南(如上)结合使用时、有效地提供了一个针对相应 ADC 相关功能的可靠"发展蓝图"。。。  

    为了节省(其他人)和本海报(时间/精力)、我展示了他的"ADC.c"代码的关键部分(未修改): (这些部分说明并记录我的发现)


    SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);

    //
    //为这些引脚选择模拟 ADC 功能。
    //请查阅数据表以查看每个引脚分配的函数。
    // TODO:更改此选项以选择您正在使用的端口/引脚。
    //
    GPIOPinTypeADC (GPIO_PORTD_BASE、GPIO_PIN_0);
    GPIOPinTypeADC (GPIO_PORTD_BASE、GPIO_PIN_1);
    GPIOPinTypeADC (GPIO_PORTD_BASE、GPIO_PIN_2);
    GPIOPinTypeADC (GPIO_PORTD_BASE、GPIO_PIN_3);
    GPIOPinTypeADC (GPIO_PORTD_BASE、GPIO_PIN_4);
    GPIOPinTypeADC (GPIO_PORTD_BASE、GPIO_PIN_5);
    GPIOPinTypeADC (GPIO_PORTD_BASE、GPIO_PIN_6);
    GPIOPinTypeADC (GPIO_PORTD_BASE、GPIO_PIN_7);

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

    ***

    ADCSequenceStepConfigure (ADC0_BASE、0、0、ADC_CTL_CH1);
    ADCSequenceStepConfigure (ADC0_BASE、0、1、ADC_CTL_CH2);
    ADCSequenceStepConfigure (ADC0_BASE、0、2、ADC_CTL_CH3);
    ADCSequenceStepConfigure (ADC0_BASE、0、3、ADC_CTL_CH4);
    ADCSequenceStepConfigure (ADC0_BASE、0、4、ADC_CTL_CH5);
    ADCSequenceStepConfigure (ADC0_BASE、0、5、ADC_CTL_CH6);
    ADCSequenceStepConfigure (ADC0_BASE、0、6、ADC_CTL_CH7);
    ADCSequenceStepConfigure (ADC0_BASE、0、7、ADC_CTL_CH12);
    ADCSequenceStepConfigure (ADC0_BASE、0、8、ADC_CTL_CH13);
    ADCSequenceStepConfigure (ADC0_BASE、0、9、ADC_CTL_CH14);
    ADCSequenceStepConfigure (ADC0_BASE、0、10、ADC_CTL_CH15 | ADC_CTL_IE |
    ADC_CTL_END);

    ***

    IntEnable (INT_ADC0SS0);
    //
    //由于采样序列3现在已配置,因此必须将其启用。
    //
    ADCSequenceEnable (ADC0_BASE、0);
    ADCSequenceEnable (ADC0_BASE、1);
    ADCSequenceEnable (ADC0_BASE、2);
    ADCSequenceEnable (ADC0_BASE、3);
    ADCSequenceEnable (ADC0_BASE、4);
    ADCSequenceEnable (ADC0_BASE、5);
    ADCSequenceEnable (ADC0_BASE、6);
    ADCSequenceEnable (ADC0_BASE、7);
    ADCSequenceEnable (ADC0_BASE、8);
    ADCSequenceEnable (ADC0_BASE、9);
    ADCSequenceEnable (ADC0_BASE、10);

    ***

    uint32_t read_adc (uint32_t 序列、uint32_t *值)

    ADCIntClear (ADC0_BASE、SEQUENCE);
    ADCProcessorTrigger (ADC0_BASE、SEQUENCE);
    while (!ADCIntStatus (ADC0_BASE、sequence、false)){}
    返回(ADCSequenceDataGet (ADC0_BASE、序列、值));

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

    大家好、

    我现在可以看到很多错误。 我返回了几个步骤、可以使它正常工作。

    这是新代码。

    e2e.ti.com/.../6866.adc.c

    谢谢!

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

    API 功能强大、但需要"注意细节"、这似乎是您(现在)提供的。
    您的"原始"尝试是"合乎逻辑"的、但未符合 API (严格)合规性的要求。

    您是否可以通过"回答成功"奖励我(详细)的问题识别(绿色按钮点击-在我的第一篇帖子上?) 谢谢你。