各位大侠,麻烦你们帮我看下这个小程序,下面是个简单的PWM程序,当占空比减小到0时,PWM停止,并跳出pwm()子程序,可是现在怎么也跳不出了,成为一个死循环,在单步调试时发现flag=1,但还是跳不出while(!flag);请大家指点迷津!<br />volatile uint16 int_count;<br />volatile uint8 flag;<br />void PWM_Initial(void)<br />{<br /> PINSEL1=PINSEL1|(1<<10);//连接PWM5<br /> PWMPR=0x00;//时钟不分频<br /> PWMMCR=0x03;//设置PWMMR6匹配后复位并产生中断标志<br /> PWMMR0=100000;//设定步进电机启动速度为1K,占空比为50% 100000<br /> PWMMR5=PWMMR0;<br /> <br /> PWMLER=0x21;//PWM0,PWM6锁存<br /> PWMPCR=0x2000;//允许PWM6单边输出<br /> PWMTCR=0x00;//关闭定时器,PWM使能<br /> <br /> VICIntSelect=0x00000000;<br /> VICVectCntl2=0x20|8;<br /> VICVectAddr2=(int)PWM5_Int;<br /> VICIntEnable=(1<<8);//使能PWM中断 <br />} <br />/////////////////////////////////////////////////////////////////////////////////////<br />void __irq PWM5_Int(void)<br />{<br /> PWMIR=0x01; <br /> if(int_count<2000)<br /> {<br /> int_count++; <br /> PWMMR0=100000;<br /> PWMMR5=100-int_count*50;<br /> }<br /> if(int_count>=2000)<br /> {<br /> PWMMR5=100000;<br /> flag=0x01;<br /> PWMTCR=0x00;<br /> }<br /> PWMLER=0x21;//PWM0,PWM6锁存<br /> VICVectAddr=0x00;<br /> }<br /> //////////////////////////////////////////////////////////////////////////////////////<br /> void pwm(void)<br />{<br /> PWMTCR=0x09; //启动PWM<br /> while(!flag); //为何程序在此处死循环????<br /> flag=0x00; <br />}<br />///////////////////////////////////////////////////////////<br />int main (void)<br />{<br /> PINSEL0=PINSEL0&0x300fffff;<br /> //配置总线<br /> PINSEL2=0xf814914;<br /> BCFG1=0x1000ffef; <br /> <br /> IO0DIR|=HC595_CS;<br /> IO0CLR|=HC595_CS;<br /> <br /> M1SpiInit();<br /> PWM_Initial();<br /> while(1)<br /> {<br /> round1(green,18);<br /> pwm();<br /> round1(r_g,18);<br /> }<br />} |
|