对于当前项目、我们将 TM4C123GH6PM UC 与 FPGA 一起使用。 我们的计划是从 uC 驱动 FPGA 的时钟、使其同步运行。 为此、我已将 引脚 PB5连接到 FPGA 时钟输入、将其设置为用作 PWM 输出 M0PWM3。 为了为 TM4C123GH6PM 计时、我们使用 PIOSC 并将其配置为以80MHz 运行。 PWM 模块使用 SYSCTL (80MHz)并 输出80MHz (50/50)的 PWM 信号。
现在的问题是、当我在示波器上研究 PWM 信号时、触发点看起来一切正常。 但是、当我查看+2us 时、我已经看到大约7ns 的抖动。 这种现象会随着时间的推移而增加。 现在、我已经将 Lauchpad (EK-TM4C123GK)连接到示波器并运行相同的代码。 它具有相同的问题。 到目前为止还可以。 当我使用外部16MHz 晶体作为时钟源时、一切都是稳定的。
我希望任何人都能在这个主题上帮助我。
我粘贴了以下范围调查中的相关源代码和两张照片:
//将系统时钟设置为以80MHz 运行
ROM_SysCtlClockSet (SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_INT);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_PWM0);
//
//配置 GPIO 引脚复用以选择这些引脚的 PWM03功能。
//
ROM_GPIOPinConfigure (GPIO_PB5_M0PWM3);
//
//为此引脚配置 PWM 功能。
//
ROM_GPIOPinTypePWM (FPGA_GPIO_PORT_BASE、FPGA_CLK_EN_PIN);
//
//将 PWM0配置为在不同步的情况下递减计数。
//
PWMGenConfigure (PWM0_BASE、PWM_GEN_1、PWM_GEN_MODE_DOWN);
//
//将 PWM 周期设置为16MHz。 以计算适当的参数
//使用以下公式:n =(1 / f)* SYSCLK。 其中 N 是
//函数参数、f 是所需的频率、SYSCLK 是
//系统时钟频率。
//在本例中、您得到:(1/16MHz)* 80MHz = 5个周期。
//
ROM_PWMGenPeriodSet (PWM0_BASE、PWM_GEN_1、5);
//
//将 PWM0设置为50%的占空比。 您将占空比设置为函数
/的周期。 由于周期是在上面设置的、因此您可以使用
// PWMGenPeriodGet ()函数。
//
ROM_PWMPulseWidthSet (PWM0_BASE、PWM_OUT_3、
ROM_PWMGenPeriodGet (PWM0_BASE、PWM_GEN_1)/ 2);
//
//启用 PWM0位3 (PB5)输出信号。
//
ROM_PWMOutputState (PWM0_BASE、PWM_OUT_3_BIT、TRUE);
//
//启用 PWM 发生器模块。
//
ROM_PWMGenEnable (PWM0_BASE、PWM_GEN_1);