为什么这段陈程序CCR1计数中断不能一直进行啊!

2019-03-24 11:45发布

以下的程序,用CCR0计数可以让LED闪烁,为什么换了CCR1计数中断不能一直进行,让LED显示闪烁啊 !#include "msp430x14x.h"void main(void)
{
  WDTCTL=WDTPW+WDTHOLD;
  P4DIR|=0x02;
  TACTL=TASSEL_1+MC_1;
  CCTL1=CCIE;
  CCR1=1500;
  _EINT();
  _BIS_SR(CPUOFF);
 
} #pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1(void)
{
  P4OUT^=0x02;
  CCR1=1500;
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
wstt
1楼-- · 2019-03-24 21:28
需要读下TAIV来清中断标志位,ccr0是可以自动清除的,其他的好像不能自动清除
零晨
2楼-- · 2019-03-24 22:12
< :TI_MSP430_内容页_SA7 --> 版主,再问下啊,谢谢了!初学者,有些地方不明白,想问问!呵呵!
1. CCR1和CCR2赋值是不是要小于CCR0的啊,还是只是在某一种模式下是这样?

2. CCR1和CCR2的值是不是每次中断后会自动清除,需要在每次中断后再次赋值,才能使他们持续中断从而达到产生PWM输出的,目的啊?

3. CCR0,CCR1,CCR2在连续计数模式下说需要设置偏移量,这个偏移量是如何计算出来的啊?
如ACLK=TACLK=32768Hz
P1.1->CCR0->32768/(2*4)=4096Hz
P1.2->CCR1->32768/(2*16)=1024Hz
P1.3->CCR2->32768/(2*100)=163.84Hz

4. CCR0,CCR1,CCR2在连续计数模式下产生PWM脉冲,是不是会产生溢出,需要判断在大于65535后减掉65535啊?
零晨
3楼-- · 2019-03-25 03:29
 精彩回答 2  元偷偷看……
3g465
4楼-- · 2019-03-25 09:17
版主不在,那我先试着回答一下好了。
1.CCR1,CCR2的值在三种模式下都要小于CCR0
2.CCR1和CCR2的值不会在中断后清除的。
3.LZ的例子是否来自TI的某个例程?我估计TI是为了展示下连续模式下的PWM输出,实际上用增模式会比较方便。而且TA有7种不同的输出模式,配置成不同的模式输出的结果也会不同。
我这里举一个具体的例子
计数器设置为 连续模式 ,CCR1输出模式设置为 OUTMODE4,即 翻转。
连续模式计数值至0XFFFF,如果CCR1值为16的话,那么当TAR计数值16,就会进入中断,输出翻转,直至计数溢出后计数值复位至0重新开始计数~这样往复。
如果在中断中加入CCR1 += 16;语句,这样CCR1的值会在每次中断后加16,相当于每计数16输出翻转一次,这样就形成了一个50%占空比的PWM波。
这个就是LZ说的偏移量吧,这个值取决于你要设的频率的。

4.无论是CCR1值还是计数值在溢出后都会从0开始计数的
零晨
5楼-- · 2019-03-25 12:14
哈哈,谢谢啦,书上说的还是不够仔细,听你这么一说,有点明白了,实际再操作一下应该就明白了,谢谢啊!
终极菜鸟
6楼-- · 2019-03-25 12:36
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章