PWM无法进入中断的问题



我的程序的意图是在每进入PWM中断以后LED取反一次.

目前的状态是PWM工作正常,但是LED长亮,请大家帮我分析一下看是哪里问题.谢谢!

PWM.C文件如下

//*****************************************************************************

#include "inc/hw_ints.h"

#include "inc/hw_memmap.h"

#include "inc/hw_pwm.h"

#include "inc/hw_sysctl.h"

#include "inc/hw_types.h"

#include "driverlib/debug.h"

#include "driverlib/interrupt.h"

#include "driverlib/pwm.h"

#include "led-test.h"

#include "driverlib/gpio.h"

#include "pin_map_lm4f230h5qr.h"        //自己定义的文件,在GPIOPinConfigSet()函数里面用到

void PWM1G3IntHandler(void)

{

static unsigned long ulcount;

PWMGenIntClear(PWM1_BASE,PWM_INT_GEN_3,PWM_INT_CNT_ZERO);

IntMasterDisable();

GPIOPinWrite(LED_BASE,LED1,~GPIOPinRead(LED_BASE,LED1));

//GPIOPinWrite(LED_BASE,LED1,0X00);

IntMasterEnable();

}

void PWM_Init()

{

 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);                       /*  使能PWM输出所在GPIO  */

   SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM1);                         /*  使能PWM模块 注意这里不能写“PWM”或者“PWM0* 为什么写PWM也可以?*/

   SysCtlPWMClockSet(SYSCTL_PWMDIV_1);                                /*  PWM时钟配置:不分频         */

   GPIOPinConfigure(GPIO_PF2_M1PWM6);

 GPIOPinConfigure(GPIO_PF3_M1PWM7);

   GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_2);                        /*  PF2配置为PWM功能  D5          */

  GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_3);                        /*  PF3配置为PWM功能  D4          */

   PWMGenConfigure(PWM1_BASE, PWM_GEN_3,                                /*  配置PWM发生器3:加减计数    */

                   PWM_GEN_MODE_DOWN );

   PWMGenPeriodSet(PWM1_BASE, PWM_GEN_3, 64000);                         /*  设置PWM发生器1的周期     注意是PWM1_BASE而不是PWM_BASE1   */

 PWMPulseWidthSet(PWM1_BASE,PWM_OUT_6, 200);                        /*  设置PWM6输出的脉冲宽度    注意 */

 PWMPulseWidthSet(PWM1_BASE,PWM_OUT_7, 200);                         /*  设置PWM7输出的脉冲宽度    注意  */

   PWMOutputState(PWM1_BASE, ( PWM_OUT_6_BIT | PWM_OUT_7_BIT), true);    /*  使能PWM输出       注意*/

   PWMGenEnable(PWM1_BASE, PWM_GEN_3);                                  /*  使能PWM发生器1,     注意       */

                                                                       /*  开始产生PWM方波             */

IntMasterEnable();

IntEnable(INT_PWM1);

PWMIntEnable(PWM1_BASE,PWM_INT_GEN_3);

PWMGenIntTrigEnable(PWM1_BASE,PWM_GEN_3,PWM_INT_CNT_ZERO);

GPIOPinWrite(LED_BASE,LED1,0XFF);

PWMGenEnable(PWM1_BASE, PWM_GEN_3);                                  /*  使能PWM发生器1,     注意       */

                                                                       /*  开始产生PWM方波             */

}

startup文件

     DCD     IntDefaultHandler           ; GPIO Port S

       DCD     IntDefaultHandler           ; PWM 1 Generator 0

       DCD     IntDefaultHandler           ; PWM 1 Generator 1

       DCD     IntDefaultHandler           ; PWM 1 Generator 2

import  PWM1G3IntHandler

       DCD     PWM1G3IntHandler            ; PWM 1 Generator 3

       DCD     IntDefaultHandler           ; PWM 1 Fault

  • andy chang :

      LED常亮可能是闪烁的频率太快,肉眼分辨不了。在取反处断点下就知道正不正常了

  • 人眼能分辨的频率在24Hz一下(拍电影就24Hz),Stellaris PWM能输出的最小频率都远高于这个频率,所以你看到的是“常亮”。如果你确实需要通过LED闪烁来标示程序运行状态,你可以在中断中设置一个计数器,每计数10000次(根据你的PWM频率定)翻转一下LED,就可以看到效果了