[ZLG-ARM] 紧急请教PWM

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

xkleee

您好:<br />&nbsp;&nbsp;&nbsp;&nbsp;建议写个小程序,调试一下,看看!0x01是不是==0。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

62

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部