打印
[ZLG-ARM]

紧急请教PWM

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

相关帖子

沙发
zlgARM| | 2007-7-27 21:57 | 只看该作者

xkleee

您好:
    建议写个小程序,调试一下,看看!0x01是不是==0。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

62

帖子

0

粉丝