2019-08-07 15:37发布
pluto55 发表于 2013-12-6 12:03 遇到这样一个问题:MSP430的定时器输出为什么会不能直接输出PWM波?而是要等待一段时间? P1DIR |= ...
最多设置5个标签!
//系统时钟配置为8Mhz,中断开启
P2DIR |= 0x02; // P2.1 output
P2SEL |= 0x02; // P2.1 配为定时器输出
TA1CTL = TASSEL_2 + ID_3 + MC_1; //+ TAIE// 开启定时器 SMCLK, 8分频(1M) up mode
TA1CCTL1 = OUTMOD_7 + CCIE; // // 工作模式7,使能CCR0中断,即最高优先级中断
TA1CCR0 = 50; // PWM Period
TA1CCR1 = 5; // 高电平时间
while(1);
//中断代码:在中断中实现TA1CCR1在30和10之间的切换
#pragma vector=TIMER1_A1_VECTOR
__interrupt void Timer_A(void)
{
switch( TA1IV )
{
case 2:
invert_flag_1 ^= 1;
if(invert_flag_1)
{
TA1CCR1 = 30; // 高电平时间
}
else
{
TA1CCR1 = 10; // 高电平时间
}
break; // CCR1 not used
case 4: break; // CCR2 not used
case 10:break;
}
}
二.P2.1 的输出波形:
TA1CCTL1 = OUTMOD_7 + CCIE; // // 工作模式7,使能CCR0中断,即最高优先级中断
上面这句代码使能的是CCR1定时到的中断
而我的目的实现应该是使能CCR0定时到的中断,在中断中更改CCR1
故应该配置为
TA1CCTL0 = CCIE;
另外在中断中还应注意一点:
在更改CCR1更改PWM波时应该将CCR1设置尽量接近CCR0,因为MSP430进入中断需要时间,
有这样的可能性:配置的CCR1太小,在TAR1计数达到CCR1之后,CCR1的赋值才实现,这样波形会失败
P1DIR |= 0x08; // P1.3 output
P1SEL |= 0x08; // P1.3 配为定时器输出
TA0CCTL2 = OUTMOD_7 ; // 工作模式7,
TA0CCR0 = 40-1; // PWM Period
TA0CCR2 = 39; // 高电平时间
TA0CTL = TASSEL_2 + MC_1; 开启定时器 SMCLK, up mode
波形如下:有办法把这7.4us去掉吗?
额,有新的问题建议重新发帖。
原来的问题解决了就及时结贴。结贴方法:http://bbs.21ic.com/icview-442857-1-1.html
如果需要找我可以 @dirtwillfly ,这样我一上线就能看到:handshake
一周热门 更多>