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.

[参考译文] TM4C129XNCZAD:如果将 PIOSC 用于系统时钟和 ADC 时钟、则不会触发 ADC 原始中断

Guru**** 2394305 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/675305/tm4c129xnczad-adc-raw-interrupt-does-not-triggered-if-using-piosc-for-both-system-clock-and-adc-clock

器件型号:TM4C129XNCZAD

您好!

如果将 PIOSC 同时用于系统时钟和 ADC 时钟、我遇到这个 ADC 原始中断问题不会触发。 下面是我用于执行测试的代码。 如果 注释了 SysCtlClockFreqSet()、则不会触发 ADC 不会中断。 只是想知道可以解决什么问题?

#include
#include
#include
#include "sysctl.h"
#include "gpio.h"
#include "adc.h"

int main (空)

uint32_t pui32ADC0Value;

//SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MOSC| SYSCTL_USE_PLL |
// sysctl_CFG_VCO_480)、120000000);

SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);

GPIODirModeSet (GPIO_PORTD_AHB_BASE、GPIO_PIN_4、GPIO_DIR_MODE_IN);
GPIOPadConfigSet (GPIO_PORTD_AHB_BASE、GPIO_PIN_4、GPIO_Strength _2mA、GPIO_PIN_TYPE_ANALOG);

ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_PROCESSOR、0);
ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_CH7 | ADC_CTL_IE | ADC_CTL_END);
ADCSequenceEnable (ADC0_BASE、3);
ADCIntClear (ADC0_BASE、3);

ADCProcessorTrigger (ADC0_BASE、3);
while (!ADCIntStatus (ADC0_BASE、3、false));
ADCIntClear (ADC0_BASE、3);
ADCSequenceDataGet (ADC0_BASE、3、&pui32ADC0Value);

while (1);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    如果您想将 PIOSC 用作系统的时钟源、那么您是否尝试了

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

    感谢您的回复。 我的意思是直接馈入 PIOSC、而不通过 PLL。 如果你观察我的代码、如果 SysCtlClockFreqSet()被注释、缺省配置设置将在 POR 之后使用。 在这种情况下、PIOSC 将直接以16MHz 的频率为 ADC 数字块和模拟块提供时钟。 在这种设置下、ADC 的中断不会触发。

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

    您能否在启用外设后尝试等待外设就绪并查看外设是否有所不同? 请参见下面的。

    SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
    while (!SysCtlPeripheralReady (SYSCTL_Periph_ADC0))



    此外、对于 ADC 引脚配置、请使用以下内容


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

    [引用用户徐清王]ADC 原始中断如果同时使用 PIOSC 作为系统时钟和 ADC 时钟、则不会触发此问题。[/引用]

    (暂时)应用(希望存在) "外部系统时钟/振荡器"-重新配置-然后(一旦原始 ADC 中断到达)确认问题 "最终发生"-与您所说的完全一样吗?

    如上所述----这种确认是不存在的----因此  ,可能 会(另一种) 出现整个"问题群"。   (在您的助手 crüe…的帮助下、产生更多的时间/精力需求)

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

    您好、Charles、

    我在尝试建议的方法后不起作用。

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

    根据我的问题、我怀疑 ADC 数字块必须从 PLL 获取时钟才能正常工作。 如果在没有 PLL 的情况下使用 PIOSC 时钟、ADC 似乎不工作、因为没有触发中断。 TI 的某个人能否确认我的疑问?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引述用户徐清 Wing]\n 在我的问题中、我怀疑 ADC 数字模块必须从 PLL 获取时钟才能正常工作。  ADC 数据表说明中的第18.3.2.7节模块计时如下:

    [引用]■16MHz PIOSC。 使用 PIOSC 可提供接近1MSPS 的转换速率。 要使用 PIOSC 为 ADC 计时、首先为 PLL 上电、然后在 ADCCC 寄存器的 CS 位域中启用 PIOSC、然后禁用 PLL。[/QUESP]也就是说、需要使用 PLL 来初始化 ADC、但随后应能够禁用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    切斯特、您好!
    你是对的。 感谢您引用有关使用 PIOSC 的数据表声明。

    ADC 时钟需要按如下方式进行配置。

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

    切斯特、您好!

    感谢您在数据表中指出我遗漏的这一陈述。 我已经使用该方法进行了测试、它运行良好。 实际上、我已经进一步修改了、在设置和禁用时钟源之前、包括等待 PLL 完全供电的代码。 下面是我包含的代码。

    //将 PLLPWR 设置为打开 PLL 的电源
    *((uint32_t *)(SYSCTL_PLLFREQ0))|=(0x1 << 23);

    //等待 PLL 通电并锁定
    while (!(*(uint32_t *)(SYSCTL_PLLSTAT)));

    //将时钟源配置为使用 PIOSC
    *((uint32_t *)(ADC0 + ADC_O_CC))= 0x1;

    //清除 PLLPWR 以关闭 PLL 的电源
    *((uint32_t *)(SYSCTL_PLLFREQ0)))&=~(0x1 <<23);

    总之、非常感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正如海报 Chester 所说、"成功解决"您的问题-最好您给他"这解决了我的问题"绿色复选框。

    您的代码确实扩展了功能-但是(两个)帖子应标记为"这已解决!"
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    按要求完成。