G2553 TA0能输出两路PWM波形么??

2019-03-24 11:52发布

用的是MSP430G2553  管脚上没有TA0.2,不像TA1那样。但是貌似论坛上有人说每路TA都能产生两路PWM波,好奇之余试试···结果没成功。以下是程序:
#include <msp430g2553.h>

void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;

  //时钟设置为1MHz mclk=smclk=dco
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
BCSCTL3 |= LFXT1S_2;
BCSCTL2 |=SELM_1 + DIVM_0;

  //初始化TA0为两通道pwm,smclk
  P1DIR |= (BIT1+BIT2);
  P1SEL |= (BIT1+BIT2);
  TA0CCR2 = 2000;
  TA0CCTL0 = OUTMOD_7;
  TA0CCTL1 = OUTMOD_7;
  TA0CCR0 = 200;
  TA0CCR1 = 1000;
  TA0CTL = TASSEL_2 + MC_1;

_BIS_SR(LPM0_bits);    //进入LPM0低功耗模式
}

额··没出波形···是不是PWM波周期设置只认CCR0??对哦 没看到哪里可以设置说周期可以设置为CCR1或者CCR2·····那怎么过TA0输出两路PWM呢??膜拜高手解答·······阿弥陀佛···· 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
index219
1楼-- · 2019-03-25 06:09
学习中。。。
wzw134
2楼-- · 2019-03-25 09:28
 精彩回答 2  元偷偷看……
wzw134
3楼-- · 2019-03-25 11:52
细节我也不过于深究,给不了你为什么的原因,但PWM输出是由定时器TA0或者TA1控制,你在G2553芯片手册上可以找到TA0.x和TA1.x的的管脚,PWM周期由TAx的CCR0控制,也就是在CCR0中你装入的必须是PWM周期,例如TA0.0有管脚P1.1和P1.5,TA0.1有P1.2和P2.6,因此,如果用TA0控制PWM,输出的PWM只能由P1.2或者P2.6输出,定义其它管脚输出无效。至于P1SEL的设置是告诉系统 P1某个管脚使用的是它的第二功能,定义了P1SEL.2则表示P1.2这个管脚使用的是它的第二功能,可以是PWM输出,也可以是其它。
不知道这样理解对不对,请高手指教。
常见泽1
4楼-- · 2019-03-25 14:52
shi de 是的 我也觉得是TA0只能一路 TA1可以
但是之前有网友说 TA0产生2路  但是没有给出例程 所以一直纠结
Widic
5楼-- · 2019-03-25 17:46
 精彩回答 2  元偷偷看……
zenghao616
6楼-- · 2019-03-25 19:43
G2553哥的可以5路PWM输出!!!!
原则上讲是可以六路的,因为每个定时器都有三个独立的比较匹配寄存器,每个比较匹配寄存器都可以独立输出一路PWM,但是TA0.2的管脚没有引出来,所以最多只能是5路,在continue up mode下每个比较匹配控制寄存器的输出模式选择mode4,不解释,上代码!

//  ACLK = n/a, MCLK = SMCLK = TACLK = default DCO ~1MHz
//  As coded and assuming ~1MHz DCO, toggle rates are:
//output 5 different PWM in different IO
//timer is work on continue up mode
//open all timer_cap interrupt
#include<msp430g2553.h>


void main(void)
{
    DCO_init(1);
   
    WDTCTL=WDTPW+WDTHOLD;
   
    P1SEL|=BIT1+BIT2+BIT5;
    P1DIR|=BIT1+BIT2+BIT5;
   
    P2SEL|=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5;
    P2DIR|=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5;   
    P1OUT=0X00;

    TA0CCTL0|=OUTMOD_4+CCIE;
    TA0CCTL1|=OUTMOD_4+CCIE;
    //TA0CCTL2|=OUTMOD_7;
    TA0CTL|=MC_2+TASSEL_2;
    //TA0CCR0=100;
    //TA0CCR1=50;
    //TA0CCR2=2500;
   
    TA1CCTL0|=OUTMOD_4+CCIE;
    TA1CCTL1|=OUTMOD_4+CCIE;
    TA1CCTL2|=OUTMOD_4+CCIE;
    TA1CTL|=MC_2+TASSEL_2;
    //TA1CCR0=700;
    //TA1CCR1=100;
    //TA1CCR2=300;

    __enable_interrupt();
    //LPM0;
}


#pragma vector=TIMER0_A0_VECTOR
__interrupt void timer0_ov(void)
{
    TA0CCR0+=100;
}

#pragma vector=TIMER0_A1_VECTOR
__interrupt void timer0_cap1(void)
{
    switch(TA0IV)
    {
        case TA0IV_TACCR1:
        TA0CCR1+=150;
        break;
      case TA0IV_TACCR2:
        //TA0CCR2=200;
        break;
      case TA0IV_TAIFG:break;
      default: break;
    }
}


#pragma vector=TIMER1_A0_VECTOR
__interrupt void timer1_ov(void)
{
    TA1CCR0+=700;
}

#pragma vector=TIMER1_A1_VECTOR
__interrupt void timer1_cap1(void)
{
    switch(TA1IV)
    {
      case TA1IV_TACCR1:
        TA1CCR1+=100;
        break;
      case TA1IV_TACCR2:
        TA1CCR2+=300;
        break;
      case TA1IV_TAIFG:break;
      default: break;
    }
}

一周热门 更多>

相关问题

    相关文章