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:TM4C1294NCPDT

Guru**** 2535750 points
Other Parts Discussed in Thread: TM4C1294NCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/752734/tm4c1294ncpdt-tm4c1294ncpdt

器件型号:TM4C1294NCPDT

我尝试生成 PWM 通道0。  我将 PLL 时钟编程为100MHz。 然后尝试生成频率为100KHz 的 PWM。  我仅获得80kHz。  下面的代码。  请帮帮我。

G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
                                            SYSCTL_OSC_MAIN |
                                            SYSCTL_USE_PLL |
                                            SYSCTL_CFG_VCO_480)、100000000);
void setupPWMClk (void)

   SysCtlPeripheralEnable (SYSCTL_Periph_PWM0);
   SysCtlPWMClockSet (SYSCTL_PWMDIV_1);
   SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
   GPIOPinConfigure (GPIO_PF0_M0PWM0);
      GPIOPinConfigure (GPIO_PF1_M0PWM1);
      GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_0);
         GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_1);
         GPIOPadConfigSet (GPIO_PORTF_BASE、GPIO_PIN_0、GPIO_Strength _10mA、GPIO_PIN_TYPE_STD);
        PWMGenConfigure (PWM0_BASE、PWM_GEN_0、PWM_GEN_MODE_DOWN |
                            PWM_GEN_MODE_NO_SYNC);
         PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、1000);
         PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0、500);
           PWMOutputState (PWM0_BASE、PWM_OUT_1_BIT | PWM_OUT_0_BIT、TRUE);
  
            //启用 PWM 发生器模块的计数器。
            PWMGenEnable (PWM0_BASE、PWM_GEN_0);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Ramesh、

    我建议您检查 MAP_SysCtlClockFreqSet 函数的结果。 查看 g_ui32SysClock 为您提供的值。 分频器将仅从480MHz PLL 分频、因此我希望您会发现时钟设置为80MHz、这将解释80kHz PWM。 在这种情况下、您可以调整 PWM 配置、使其使用800而不是1000、这样就可以获得100kHz 的输出。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ralph、

    实际上、我通过切换 SysTick 中断中的 GPIO 验证了系统时钟、它的频率为100MHz。 在 TM4C1294用户指南第23.3.1节中、提到了系统时钟用作 PWM 的输入。 即使它源自480MHz、输出频率也应该更高。

    根据 Tiva 库用户指南、我将 SysCtlPWMClockSet (SYSCTL_PWMDIV_1)更改为 PWMClockSet (PWM0_BASE、PWM_SYSCLK_DIV_1)。 即使如此,问题仍然存在。

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

    您好 Ramesh、

    我不确定在使用 GPIO 进行测量的过程中采用了什么逻辑、但我必须坚持我的先前立场。 我运行了您的代码并检查 了 ui32SysClock 的结果、它明显显示为80MHz。

    然后、我更改了您的代码、将 PWM 发生器和宽度设置为:

    PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、800);
    PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0、400); 

    在这种情况下、我验证了 PF0上输出占空比为50%的100kHz PWM。

    为了避免混淆、我建议将 SysCtlClockFreqSet 中的频率设置为它将实际输出的频率、换句话说、使用这个调用:

    ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、8000000); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ralph、
    在您的代码中、您将设置为80MHz 作为系统时钟。 我将设置100MHz、因为这是我们的要求。

    G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、100000000);

    为了验证系统是否以100MHz 的频率运行、我对 SysTick 进行了如下编程
    SysTickIntHandler (空)

    //
    //更新 SysTick 中断计数器。
    //
    G_ui32sysCounter++;

    char cone、cTwo;


    psysTimerTicks=真;

    if (切换)

    GPIOPinWrite (GPIO_PORTL_BASE、GPIO_PIN_7、GPIO_PIN_7);
    TOGGLE =错误;

    其他

    GPIOPinWrite (GPIO_PORTL_BASE、GPIO_PIN_7、0);
    TOGGLE =真;


    //
    //更新中断状态。
    //


    ROM_IntMasterEnable();


    无效
    initSysTick (uint32_t ui32SysClock)

    G_ui32sysCounter = 0;
    SysTickPeriodSet (ui32SysClock/10000);//1/100 MHz=.01微秒和.01*10000=100微秒
    psysTimerTicks=false;

    TOGGLE =错误;


    如果我检查 PL7、我会得到一个占空比为50%的5Kz 信号。

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

    TM4C1294NCPDT 不会以100MHz 运行。 周期。 由于内部 PLL 不是以100的倍数运行、因此无法为该频率对其进行配置。

    您可以选择120 MHz 或80 MHz。

    您的测量方法存在缺陷、无法提供正确的结果。 SysCtlClockFreqSet 的输出准确地告诉您频率。

    我将代码调整为80 MHz、因为这样、对器件进行编程的其他人就不会对系统时钟速度产生错误的想法。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ralph、
    你是对的。 正如您提到的、SysCtlClockFreqSet 只返回80MHz。 我想时钟可以设置为高达120 MHz 的任何频率。 您能否在用户指南中指出此信息?


    非常感谢您的支持

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

    遗憾的是、数据表无法传达此类详细信息、但核心解释只是基于系统配置的 PLL 运行频率为320MHz 或480MHz、并且只能被整数除以提供系统时钟。 因此、无法获得100MHz、因为没有可以将320或480分频为等于100的整数。 但是、80MHz、120MHz 或60MHz 都是可能的设置。