N76E003 PWM中断及设定新的占空比

首先还是来看看PWM中断寄存器,及其含义。
在这里插入图片描述

PWM模块带有标志位 PWMF (PWMCON0.5) 用来标志当前 PWM周期完成状态。PWMF通过软件清零。

别忘记了使能PWM中断,以及开启总中断。
在这里插入图片描述

再来看看PWM中断的中断号。
在这里插入图片描述
就是这么简单,就是这么直接,接下来我们就开始配置代码吧。
在本次的例程中,我们将在中断中,修改初始设定的占空比,最后再逻辑分析仪中进行查看。

void main(void)
{
    Set_All_GPIO_Quasi_Mode;//所有IO设置为双向模式
    
				EA=1;//开启总中断
				set_EPWM;//使能pwm中断
	     	PWM_INT_PWM4;//设定中断源为PWM4
      	PWM_FALLING_INT;//下降沿触发
	
	
				PWM5_P03_OUTPUT_ENABLE;//使能PWM5,通过P03引脚输出
				PWM4_P01_OUTPUT_ENABLE;
	
        clr_PWMTYP;//边沿对齐模式
        clr_PWMMOD0;//设置为独立输出模式
        clr_PWMMOD1;
	
        PWM_CLOCK_DIV_8;//8分频模式
        PWMPH = 0x07;//1999(Dec)
        PWMPL = 0xCF;

/**********************************************************************
	PWM frequency = Fpwm/((PWMPH,PWMPL) + 1) <Fpwm = Fsys/PWM_CLOCK_DIV> 
								= (16MHz/8)/(0x7CF + 1)
								= 1KHz (1ms)
								
	PWMDT=(PDTCNT+1)/Fpwm	=10/2Mhz=0.005ms
***********************************************************************/	
	
    set_SFRPAGE;//PWM4 and PWM5 duty seting is in SFP page 1
    PWM4H = 0x01;//500(Dec)                
    PWM4L = 0xf4;
		
		PWM5H = 0x01;//500(Dec)                
    PWM5L = 0xf4;
		
    clr_SFRPAGE;                                            
	  set_LOAD;//载入周期和占空比
    set_PWMRUN;//开始输出PWM
    while(1)
    {
       //构建你的代码
    }
}


void PWMISR() interrupt 13
{
	if(PWMF)//检测到中断标志位
	{
		  clr_LOAD;//关闭载入之前的值
		  clr_PWMF;//清楚PWM中断标志位      		Timer0_Delay1ms(1)
			set_SFRPAGE;//PWM4 and PWM5 duty seting is in SFP page 1
			PWM5L-=30;
			clr_SFRPAGE;   
			set_LOAD;//设定完成,开始载入
	}
}

最终效果如下图所示,上面第一行没有发生变化的为PWM4,依然按照初值运行。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u014798590/article/details/82846270