主题中讨论的其他器件: TM4C123GH6PGE
您好,
在配置宽定时器以生成 PWM 信号时,内部 ADC 已停止工作。
WT1CCP1引脚109用于 PWM 生成。
宽定时器配置是否会导致内部 ADC 的功能中断。
此致、
罗希思
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.
您好,
在配置宽定时器以生成 PWM 信号时,内部 ADC 已停止工作。
WT1CCP1引脚109用于 PWM 生成。
宽定时器配置是否会导致内部 ADC 的功能中断。
此致、
罗希思
您好!
您的意思是 TM4C123GH6PGE 而不是 TM4C1231H6PGE 吗? 事实上、没有 TM4C1231H6PGE 器件型号。
话虽如此、定时器配置没有任何理由干扰 ADC。 中断 ADC 意味着什么? ADC 根本不运行、还是 ADC 不会产生与未使用定时器相同的结果? 我建议您再次检查您的软件、看看如果只是简单地停止 ADC、您是否错误地禁用了 ADC。
您好、Charles、
感谢您的回答。
正在使用 TivaTM4C1231H6PGE 微控制器。
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 原始中断状态)寄存器以查看是否设置了标志。