• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

MSP430G2253做多输出PWM!!!

最近在调试一款产品,需要同时输出3路不同占空比的PWM,看了很多资料和例程,发现很多都是单路的,也有很多多路的,经过测试后发现只能同时输出3路不同占空比的PWM,将程序公布如下,经过测试了,需要改变CCR0可以改变频率,改变CCR1和 CCR2可以改变占空比;
void tapwm(void)
{
//引脚设置(暂时使用P1.2输出一路PWM)TA0定时器只有P1.2/P1.6/P2.6 可以输出PWM,而TA1定时器则有P2.1\P2.2\P2.4\P2.5输出一共可以输出3路不同占空比的PWM,2个频率的
// TA0支持的引脚有P1.1、P1.2、P1.5、P1.6、P2.6(P2.6一般不用,因为要接晶振哦)只有P1.2、P1.6、P2.6输出CCR1
/*
TA0CTL = TASSEL_2 + TACLR;                 // 设置定时器A控制寄存器,// TACLR=0x0004,清除定时器A计数器// TASSEL2=0x1000,Timer A clock source select: 2 - SMCLK
TA0CCR0 =400;             //始终为 8MHz,设置中断频率为10K
TA0CCTL1 = OUTMOD_7;                       // CCR1 reset/set模式7.当计数器计至CCTL1时TA0清零,至CCR0时TA0置1
TA0CCR1 = 100;                               // CCR1 PWM 任务周期
TA0CCTL2 = OUTMOD_7;                     // CCR2 reset/set模式7.当计数器计至CCTL2时TA1清零,至CCR0时TA1置1
TA0CCR2 = 300;                              // CCR2 PWM 任务周期
P2DIR |= BIT6 ;                            // P2.6 P2.0  输出
P2SEL |= BIT6 ;                            // P2.6 TA0模式 输出CCR1
P1DIR |= BIT2  + BIT6;      // P1.2 P1.6 TA0模式 输出CCR1
P1SEL |= BIT2  + BIT6;      // P1.2 P1.6  TA0模式 输出CCR1
TA0CTL |= MC_1;                           // 增模式启动Timer_A
*/
// TA1支持的引脚有P2.1 P2.2 P2.4 P2.5 可以输出2路不同占空比的PWM(CCR1/CCR2)
TA1CTL = TASSEL_2 + TACLR;    // 设置定时器A控制寄存器,// TACLR=0x0004,清除定时器A计数器// TASSEL2=0x1000,Timer A clock source select: 2 - SMCLK
TA1CCR0 =400;                                                   //始终为 8MHz,设置中断频率为10K
TA1CCTL1 = OUTMOD_7;                       // CCR1 reset/set模式7.当计数器计至CCTL1时TA0清零,至CCR0时TA0置1
TA1CCR1 = 100;                               // CCR1 PWM 任务周期
TA1CCTL2 = OUTMOD_7;                     // CCR2 reset/set模式7.当计数器计至CCTL2时TA1清零,至CCR0时TA1置1
TA1CCR2 = 300;                              // CCR2 PWM 任务周期
P2DIR |=  BIT1 + BIT2  + BIT4 + BIT5;                            // P2.1 P2.2 P2.4 P2.5 输出
P2SEL |=  BIT1 + BIT2  + BIT4 + BIT5;                            // P2.1 P2.2 TA1模式 输出CCR1    P2.4 P2.5 TA1模式 输出CCR2
TA1CTL |= MC_1;
}
全部回复(1)
正序查看
倒序查看
2014-04-26 23:37
汇编表示不懂,,,
0
回复