搜索
bottom↓
回复: 11

MSP430G2553 4路PWM输出 开中断不正常

[复制链接]

出0入0汤圆

发表于 2013-6-5 10:04:30 | 显示全部楼层 |阅读模式
利用MSP430G2553 4路PWM输出产生,在不打开GIE的时候IO引脚输出正常但是打开GIE中断后输出不正常,具体程序如下:

void Timer0A3PWM()
{   
        P1DIR |=0x66 ;                             // 0110 0110
        P1SEL |=0x66 ;                             // 0110 0110
        
      TACTL |= TASSEL_2 + MC_1 ;       // TACTL=TA0CTL 时钟源选择SMCLK MCLK=SMCLK=TACLK=default DCO 增计数模式
              
        TACCTL0 |= OUTMOD_4;               //模式4是toggle翻转模式 计数达到TACCR0输出翻转 占空比50%     
        TACCTL1 |= OUTMOD_7;               //模式7是reset/set模式  计数达到TACCR1输出0  TACCR0输出1
        
        TACCR0 = 120-1;                          //模式4周期的一半 模式7的整周期PWM的周期是120  

        TACCR1 = 60;                               //模式7的占空比 PWM的初值为60 此时的占空比为50%

}

void main(void)
{
      WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
      Timer0A3PWM();  
     

//  _BIS_SR(LPM0_bits+ GIE );                    // Enter LPM0 w/ interrupt 中断使能后也不正常!

     _BIS_SR(LPM0_bits );                       //不打开中断都正常
      while (1);
}

出0入0汤圆

发表于 2013-6-5 10:29:21 | 显示全部楼层
本帖最后由 guo123456 于 2013-6-5 10:32 编辑

初始化中断屏蔽寄存器试试,应该是有中断触发,你没写到相关中断入口。

出0入0汤圆

 楼主| 发表于 2013-6-5 14:58:55 | 显示全部楼层
guo123456 发表于 2013-6-5 10:29
初始化中断屏蔽寄存器试试,应该是有中断触发,你没写到相关中断入口。

如果打开中断使能而不写入口中断,程序会不正常?我本来是想加一个按键利用中断唤醒MCU来调节Pwm的占空比和周期,但是现在没写按键这部分就打开系统的中断允许,PWM就输出不正常了,

出0入0汤圆

发表于 2013-6-7 09:58:35 | 显示全部楼层
IO口的中断好像需要手动复位,你试一下是不是这个原因,在P1口的中断程序中增加P1IFG=0x00试试,俺刚刚学习430,意见供参考。

出0入0汤圆

 楼主| 发表于 2013-6-7 17:45:33 | 显示全部楼层
皮爱了西 发表于 2013-6-7 09:58
IO口的中断好像需要手动复位,你试一下是不是这个原因,在P1口的中断程序中增加P1IFG=0x00试试,俺刚刚学习 ...

我没有写中断服务子程序,只是打开了系统中断,使得PWM的输出频率和占空比不正常。而不开中断PWM的输出频率和占空比都是程序的计算值。

出0入0汤圆

发表于 2013-6-7 23:13:34 | 显示全部楼层
实测可以用,
  1. void pwmOut(void)
  2. {
  3.   TBCTL=TBSSEL_2+TBCLR+MC_1;
  4.   TBCCTL0=OUTMOD_4;//pwm输出方式
  5.   TBCCTL1=OUTMOD_3;//pwm输出方式
  6.   TBCCTL2=OUTMOD_3;//pwm输出方式
  7.   TBCCR0=8000;//pwm中断周期
  8.   TBCCR1=4000;//PWM的低电平时间
  9.   P4DIR=0X07;
  10.   P4SEL=0X07;//P4.1作为定时器B的PWM输出
  11.   
  12. }

  13. void main(void)
  14. {
  15.   
  16.     WDTCTL=WDTPW + WDTHOLD; // 关闭看门狗
  17.   
  18.     P1SEL=0;            // 设置为普通I/O 口
  19.     P1DIR|=0x0B;     //0000 1011       // 设置方向p1.2输入,P1.3输出
  20.     P1OUT=0x03;     //0000 0011   // 设置初始值
  21.    

  22.     //P2.0输出方波实验
  23.     TACTL=TASSEL1 + TACLR;//设置定时器A
  24.     CCTL0=CCIE;//Enable CCR0 interupt
  25.     CCR0=20000;
  26.     P2DIR = 0X01;//P2.0 OUTPUT
  27.    
  28.     TACTL |= MC0;//以增计数模式开始Timer_A
  29.     pwmOut();
  30.     AD();
  31.     Key();
  32.     _EINT();
  33.     _BIS_SR(GIE);
  34.     for(;;)
  35.     {
  36.       _BIS_SR(CPUOFF);
  37.       _NOP();
  38.     }
  39.    
  40. }
复制代码


在Protues仿真可以看到波形

出0入0汤圆

 楼主| 发表于 2013-6-8 20:20:05 | 显示全部楼层
皮爱了西 发表于 2013-6-7 23:13
实测可以用,

在Protues仿真可以看到波形

其实看官方的历程有开中断并输出PWM的,应该是中断响应影响了TIMA,只是上面的代码仅仅加了一个GIE就使得输出波形发生的变化,

出0入0汤圆

发表于 2013-9-12 14:39:03 | 显示全部楼层
430,中断。。

出0入0汤圆

 楼主| 发表于 2013-9-14 09:57:59 | 显示全部楼层
luckseason 发表于 2013-9-12 14:39
430,中断。。

应该是中断影响的定时器技术,造成输出不正常

出0入0汤圆

发表于 2014-8-14 16:53:57 | 显示全部楼层
四路????

出0入0汤圆

 楼主| 发表于 2014-8-16 17:54:27 | 显示全部楼层

是的,4路输出PWM

出0入0汤圆

发表于 2014-8-29 06:40:36 | 显示全部楼层
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 18:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表