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:在 ADC 采样过程中无法脱离中断过程

Guru**** 2541480 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1075822/tm4c1294ncpdt-can-not-get-out-of-an-interrupt-process-during-adc-sample

部件号:TM4C1294NCPDT
“线程”中讨论的其它部件:TM4C123

我的程序无法返回电压值, 表达式窗口中的值为 “未找到标识符:ADC1_BASE”

我的程序似乎无法结束中断,该程序是 ADC 的基本示例,我认为它不应该这样做...  

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

    您好,

     问题出在下面的行。 您需要传递一个指针。

    ADCSequenceDataSet (ADC1_BASE,0,ui32ADC1Value);

    您需要更改为:

    ADCSequenceDataSet (ADC1_BASE,0,&ui32ADC1Value);

    下面是一个工作代码。  

    int main(void)
    {
        uint32_t ui32ADC1Value;
    
        SysCtlClockSet ( SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ ) ;
        SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC1);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
        GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_2);
        ADCReferenceSet(ADC1_BASE, ADC_REF_INT);
        ADCSequenceConfigure(ADC1_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);
        ADCSequenceStepConfigure(ADC1_BASE, 0, 0, ADC_CTL_CH1 | ADC_CTL_IE | ADC_CTL_END);
        ADCSequenceEnable(ADC1_BASE, 0);
        ADCIntClear(ADC1_BASE, 0);
    
        //volatile  uint32_t ui32ADC1Value;
    
    while(1)
    {
        ADCProcessorTrigger(ADC1_BASE, 0);
       while(!ADCIntStatus(ADC1_BASE, 0, false))
       {
       }
         ADCIntClear(ADC1_BASE, 0);
    
        //
        // Read ADC Value.
        //
        ADCSequenceDataGet(ADC1_BASE, 0, &ui32ADC1Value);
    
        SysCtlDelay(SysCtlClockGet() / 12);
    }
    }
    

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

    感谢你的帮助,但我仍然有问题

    当我更改代码时,我发现该表达式在开始运行时仍然是“找不到标识符:ui32ADC1Value”

    我想知道我的设备是否有问题,但当我使用另一台设备时,也发生了同样的情况。

    当我单击简历时,它就像这样

    当我单击暂停时,它就像这样

    我现在没有直流电源,因此我连接了3.3 V 和 PE2以尝试 ADC

    这 是我使用的代码

    #include <stdint.h>
    #include <stdbool.h>
    #include "inc/HW_memmap.h"(#include "inc/HW_memmap.h")
    #include "inc/HW_types.h"
    #include "driverlib/adc.h"
    #include "driverlib/GPIO.h"
    #include "driverlib/sysctl.h"
    Int main (无效)

    UINT32_t ui32ADC1Value;

    Sysctl 时钟集( sysctl_SYSDIV_5|sysctl_use_PLL |sysctl_OSC 主|sysctl_Xtal_16MHz );
    SysPeripheralEnable (sysctl_Periph_ADC1);
    SysPeripheralEnable (sysctl_Periph_GPIOE);
    GPIOPinTypeADC (GPIO _Porte 基础,GPIO _PIN_2);
    ADCReferenceSet (ADC1_base,ADC_REF_INT);
    ADCSequenceConfigure (ADC1_BASE,0,ADC_TRIG_PROCESSOR, 0);
    ADCSequenceStepConfigure (ADC1_BASE,0,0,ADC_CTL_CH1 | ADC_CTL_IE | ADC_CTL_END);
    ADCSequenceEnable (ADC1_BASE,0);
    ADCIntClear (ADC1_BASE,0);

    //volatile UINT32_t ui32ADC1Value;

    While (1)(同时)

    ADCProcessorTrigger (ADC1_BASE,0);
    While (!ADCIntStatus (ADC1_BASE,0,false))

    }
    ADCIntClear (ADC1_BASE,0);

    //
    //读取 ADC 值。
    //
    ADCSequenceDataSet (ADC1_BASE,0,&ui32ADC1Value);

    SystlDelay(SysClockGet()/12);
    }
    }

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

    我给你的代码是 TM4C123。 TM4C129的时钟定义将不同。 因此,您可以首先注释该行,这样它在默认情况下只使用内部 PIOC,就像您在原始代码中使用的一样。  

     //SysClockSet ( sysctl_SYSDIV_5|sysctl_use_PLL |sysctl_OSC 主|sysctl_Xtal_16MHz ); //注释掉此行,因为这是 TM4C123的行

    或者,如果您不想使用 PIOSC,而是像下面这样使用 PLL,请定义 TM4C129的时钟。
    ui32SysClock = SysClockFreqSet((((sysctl_XT_25MHz)| sysctl_OSC 主| sysctl_use_PLL | sysctl_CFG VCO_240),120000000);

    [引用 userid="512600" url="~/support/icros/arm-based 微处理器-组/基于 ARM 的微控制器/f/arm-based 微控制器- forum/1075822/tm4c1294ncpdt-CAN-no-no-Get-out of an interrup-process-dure-during -sample/3981837[当代码未能在代码中找到时'IDS'398317]'ID'/C32I 时,无法启动'ID'#391837'表达式'<'<'<quote '<quot>

    ui32ADC1Value 声明为局部变量。 不能在表达式窗口中显示它。 您只能在变量中查看它。 参见下文。 如果要在表达式窗口中查看变量,则需要将该变量声明为全局变量。 也不能显示 ADC1_BASE,因为它只是一个#define,而不是一个表达式。