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.

[参考译文] TM4C1231H6PGE:配置为生成 PWM 的宽定时器后、内部 ADC 停止响应

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/917232/tm4c1231h6pge-internal-adc-stopped-responding-after-the-wide-timer-configured-to-generate-a-pwm

器件型号:TM4C1231H6PGE
主题中讨论的其他器件: TM4C123GH6PGE

您好,

在配置宽定时器以生成 PWM 信号时,内部 ADC 已停止工作。

WT1CCP1引脚109用于 PWM 生成。

宽定时器配置是否会导致内部 ADC 的功能中断。

此致、

罗希思

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

    您好!

     您的意思是 TM4C123GH6PGE 而不是 TM4C1231H6PGE 吗? 事实上、没有 TM4C1231H6PGE 器件型号。  

     话虽如此、定时器配置没有任何理由干扰 ADC。 中断 ADC 意味着什么? ADC 根本不运行、还是 ADC 不会产生与未使用定时器相同的结果?  我建议您再次检查您的软件、看看如果只是简单地停止 ADC、您是否错误地禁用了 ADC。  

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

    您好、Charles、

    感谢您的回答。

    正在使用 TivaTmTM4C1231H6PGE 微控制器。

    ADC 根本不运行。

    下面是 ADC 初始化和 PWM 生成的代码片段,提供了更多信息:ADC 首先在代码序列中初始化,然后是 PWM 生成,这是一次性过程。

    希望这能为我提供一些指导。

    //
    
    void halby_init_adc (void)
    {
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
    ROM_SysCtlPeripheralReset (SYSCTL_Periph_ADC0);
    ROM_SysADCSpeedSet (SYSCTL_ADCSPEED_1MSPS);
    ROM_ADCHardware_OCtl= UMPREED_ADC0);ROM_OCCOPENED_MO因 子配置(SYSCTHRESHO_ADCTL);OCTROM_OSW_
    ROM_ADCReferenceSet (ADC0_BASE、ADC_REF_EXT_3V);
    
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_ADC1);
    ROM_SysCtlPeripheralReset (SYSCTL_Periph_ADC1);
    ROM_SysCtlADCSpeedSet (SYSCTL_ADCSPEED_1MSPS);
    ROM_ADCHardwareOversampleConfigure (ADC1_base、HW_oversample_factor);
    ROM_ADCReferenceSet (ADC1_base、ADC_REF_EXT_3V);
    
    ROM_ADCSequenceDisable (ADC0_BASE、 ADC_0_SEQUENCER);
    ROM_ADCSequenceConfigure (ADC0_BASE、ADC_0_SEQUENCER, ADC_TRIGGER_PROCESSOR, 0);
    
    ROM_ADCSequenceStepConfigure (ADC0_BASE、ADC_0_SEQUENCER0、0、(GET_VOLTAGE (卤素_USB1_PD_CUR_SENSE)));
    ROM_ADCSequenceStepConfigure (ADC0_BASE、 ADC_0_SEQUENCER、1、(GET_VOLTAGE (卤素 MCU_VMON_0_6_DDR4_VTT));
    ROM_ADCSequenceStepConfigure (ADC0_BASE、ADC_0_SEQUENCER, 2、(GET_VOLTAGE (卤素_USB2_PD_CUR_SENSE)));
    ROM_ADCSequenceStepConfigure (ADC0_BASE、ADC_0_SEQUENCER、3、 (GET_VOLTAGE (卤素 MCU_VMON_2_5V));
    ROM_ADCSequenceStepConfigure (ADC0_BASE、ADC_0_SEQUENCER4、(GET_VOLTAGE (卤素 MCU_VMON_1_05V))));
    ROM_ADCSequenceStepConfigure (ADC0_BASE、ADC_0_SEQUENCER、5、(GET_VOLTAGE (卤素 MCU_VMON_1_08V)));
    ROM_ADCSequenceStepConfigure (ADC0_BASE、 ADC_0_SEQUENCER、6、(GET_VOLTAGE (卤素 MCU_VMON_1_2V));
    ROM_ADCSequenceStepConfigure (ADC0_BASE、ADC_0_SEQUENCER、 7、(GET_VOLTAGE (卤素 MCU_VMON_1_5V)| ADC_CTL_IE | ADC_CTL_END);
    ROM_ADCSequenceEnable (ADC0_BASE、ADC_0_SEQUENCER);
    //清除 ADC 中断标志。 ROM_ADCIntClear
    (ADC0_BASE、ADC_0_SEQUENCER);
    ROM_ADCIntEnable (ADC0_BASE、ADC_0_SEQUENCER);
    
    /* ADC1*/
    ROM_ADCSequenceDisable (ADC1_BASE、 ADC_1_SEQUENCER);
    ROM_ADCSequenceConfigure (ADC1_base、ADC_1_SEQUENCER, ADC_TRIGGER_PROCESSOR, 0);
    
    ROM_ADCSequenceStepConfigure (ADC1_base、ADC_1_SEQUENCER、0、(GET_VOLTAGE (卤素 MCU_VMON_1_8V)));
    ROM_ADCSequenceStepConfigure (ADC1_base、 ADC_1_SEQUENCER_1、(GET_VOLTAGE (卤素 MCU_VMON_P3_3V_MCU));
    ROM_ADCSequenceStepConfigure (ADC1_base、ADC_1_SEQUENCER_D、 2、(ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END);
    ROM_ADCSequenceEnable (ADC1_base、ADC_1_SEQUENCERs);
    //清除 ADC 中断标志。 */
    ROM_ADCIntClear (ADC1_base、ADC_1_SEQUENCER]);
    ROM_ADCIntEnable (ADC1_base、ADC_1_SEQUENCER];
    
    return;
    }
    
    
    
    
    
    
    //
    
    #include 
    #include 
    #include "Stellaris/inc/hw_gpio.h"
    #include "Stellaris/inc/hw_ints.h"
    #include "Stellaris/inc/hw_memmap.h"
    #include "Stellaris /inc/hw_timers.h"
    
    #include "Stellaris /driverlib/driver.h"
    #drivers/drivers/drivers/example.包含"Stellaris #/drivers/drivers/drivers/drivers.lib#/drivers/drivers/example.h
    
    #include "#/drivers/drivers/drivers/drivers/drivers/drivers/example.h #include "#include "#defintrles/drivers/drivers/drivers/inc
    
    
    
    
    
    
    //
    
    //
    //
    // g_ui32SysClock 包含系统时钟频率
    //
    //*********
    #if defined (target_IS_TM4C129_RA0)|| \
    已定义(TARGET_IS_TM4C129_RA1)|| \
    已定义(TARGET_IS_TM4C129_RA2)
    uint32_t g_ui32SysClock;
    #endif
    
    
    
    int PWM_PIN_109 (void)
    {
    
    SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
    SYSCTL_XTAL_25MHz);
    
    SysCtlPeripheralEnable (SYSCTL_Periph_WTIME1);
    
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK);
    
    MAP_GPIOPadConfigSet (GPIO_PORTK_base、GPIO_PIN_7、GPIO_Strength _8mA、GPIO_PIN_TYPE_STD);
    
    GPIOPinConfigure (GPIO_PK7_WT1CCP1);
    
    GPIOPinTypeTimer (GPIO_PORTK_base、GPIO_PIN_7);
    
    TimerConfigure (WTIMER1_BASE、TIMER_CFG_SPLIT_PAIR | TIMER_CFG_B_PWM);
    
    TimerLoadSet (WTIMER1_BASE、TIMER_B、2500000);
    
    TimerMatchSet (WTIMER 1_BASE、Timer_B、
    TimerLoadGet (WTIMER 1_BASE、Timer_B)/100);
    
    TimerEnable (WTIMER 1_BASE、Timer_B);
    
    }
    
    

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

    您好!

     这对我来说很奇怪。 浏览代码、我不会真正发现您的代码有问题。 让我在这里提出一些问题。

     -如果您在  不调用 PWM_PIN_109()的情况下只调用卤素_init_adc(),则表示 ADC 正在工作。 是这样吗?

      -如果您 只调用 PWM_PIN_109()而不调用 卤素_init_adc(),会发生什么情况? PWM 是否在引脚109上工作?

      -当您同时调用 PWM_PIN_109 ()和 卤素_init_adc ()时,您说 ADC 停止工作。 引脚109上的 PWM 呢? 它是否继续工作?

      -当您在引脚109上使用 PWM 时、这是否只是一个问题? 为了进行实验、您可以尝试其他 PWM 引脚吗? 它会产生影响吗?

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

    您好、Charles、

    请在线查找我的回复。

    -如果您在 不调用 PWM_PIN_109()的情况下只调用卤素_init_adc(),则表示 ADC 正在工作。 是这样吗?

    -->是,不调用 PWM_PIN_109(),只调用卤素_init_adc(),则 ADC 正常工作。

     -如果您只调用 PWM_PIN_109()而不调用卤素_init_adc(),会发生什么情况? PWM 是否在引脚109上工作?

    -->这是我没有尝试过的。PWM 代码的这一部分是为了满足最新的硬件设计要求,所以已经被添加到最新版本的软件中。如果硬件不能正常工作,在硬件上尝试这可能会阻碍电路板上的某些东西。

     -当您同时调用 PWM_PIN_109 ()和卤素_init_adc ()时,您说 ADC 停止工作。 引脚109上的 PWM 呢? 它是否继续工作?

    -->是的,PWM 仍在继续工作。

     -当您在引脚109上使用 PWM 时、这是否只是一个问题? 为了进行实验、您可以尝试其他 PWM 引脚吗? 它会产生影响吗?

    -- >正如我提到的、这是基于驱动脉冲是引脚109上强制添加的关键硬件要求。没有 GPIO 可用于在另一引脚上验证、由于 MCU、因此很难恢复单元 是驱动关键电源轨和 CPU 轨的电源轨。

    谢谢、此致、

    Rohith。

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

    您好、Rohith、

     感谢您回答我的问题。 我仍然无法理解为什么计时器会干扰 ADC。 我将需要您进行一些调试。 这就是我建议你做的事。  

     -在不调用 PWM_PIN_109()的情况下,在寄存器浏览器窗口中检查 ADC 寄存器。

     -在单独的运行中、调用 PWM_PIN_109 ()并重新检查 ADC 寄存器。 您是否在不调用 PWM_PIN_109 ()的情况下看到与 ADC 相比有任何差异? 我特别想知道的是、为什么 ADC 会像您报告的那样突然停止。 ADC 寄存器设置应该提供一些线索。  

     -您为 ADC_TRIGGER_PROCESSOR.ADC_TRIGGER_PROCESSOR. 这意味着您需要提供一个触发器,以便使用 ADCProcessorTrigger()在应用程序中启动转换。 我没有您的代码、因此我不知道您是如何创建触发器的。 请确保为 ADC 提供触发器。  

     -启用 ADC 中断。 因此、您需要查看 ADCRIS (ADC 原始中断状态)寄存器以查看是否设置了标志。