大家好、我正在使用以下代码来生成 PWM 信号、我最终希望它以这种方式工作、我希望它生成特定频率、然后我将获得一个中断、让我切换到不同的频率。 目前、我尚未设置中断、但尝试使用延迟来模拟预期的操作。 因此、我基本上让它产生一个特定的频率、一段时间内的延迟、然后在延迟之后切换频率。 但是、每当我尝试进行此更改时、我都无法执行此操作、我最终会进入故障 ISR 循环。
在 PWMOutputState更改并重新配置 PWMdisable 之前、我尝试使用 PWMdisable 并将其设置为 false。 我还尝试仅更改 PWMGenPeriodSet 和 PWMGenWidthSet 而不再次调用完整函数、但也失败了。
我们将感谢您的任何帮助或想法。
void
configurePWM (int test)
{
uint32_t 节拍;
节拍数= TEST;//NUMBER_TICKS_Freq ();
//PWMOutputState (PWM0_BASE、PWM_OUT_0_BIT | PWM_OUT_1_BIT、false);
//PWMGenDisable (PWM0_BASE、PWM_GEN_0);
//
//启用 PWM 使用的 GPIO 外设(PF0、最终为 PF1)
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
//
//启用 PWM0
//
SysCtlPeripheralEnable (SYSCTL_Periph_PWM0);
//
//将时钟分频以供 PWM 使用-现在将使用一个
//
SysCtlPWMClockSet (SYSCTL_PWMDIV_1);
//
//解锁引脚
//
HWREG (GPIO_PORTF_BASE + GPIO_LO_LOCK)= GPIO_LOCK_KEY;
HWREG (GPIO_PORTF_BASE + GPIO_O_CR)= 0x01;
//
//为 PWM 配置 GPIO 引脚
//
GPIOPinConfigure (GPIO_PF0_M0PWM0);
GPIOPinConfigure (GPIO_PF1_M0PWM1);
GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_0 | GPIO_PIN_1);
//
//配置 PWM
//
PWMGenConfigure (PWM0_BASE、PWM_GEN_0、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);
//
//设置 PWM 周期
//
PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、ceil (tick));
//
//设置占空比
//
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0、ceil (tICKs/2));
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_1、ceil (tICKs/2));
//
//启用 PWM
//
PWMGenEnable (PWM0_BASE、PWM_GEN_0);
PWMOutputInvert (PWM0_BASE、PWM_OUT_1_BIT、TRUE);
PWMOutputState (PWM0_BASE、PWM_OUT_0_BIT | PWM_OUT_1_BIT、TRUE);
}
int
main (void)
{
G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);
configurePWM (1000);
//configureUART();
//IntMasterEnable();//使处理器响应中断。
//Induction Pulse ();
SysCtlDelay (40000000*10);//40000000 = 120MHz/3 = 1秒、因此这应该是10秒-在之前的论坛中阅读、了解如何接近1秒的延迟
configurePWM (500);
// SysCtlDelay (400000);
//TimerEnable (TIMER0_BASE、TIMER_Both);
while (1)
{
}
}