MSP430149TimerA捕获辅助系统时钟的输出波形

2019-07-15 15:55发布

DEBUG 的时候发现中断时TAIV=10的时候也无法进入其中进行overflow++
/*P2.0和P1.2相连*/
#include <msp430x14x.h> //头文件,430
#include "LCD12864.h" // LCD12864
#include "delay.h" // 延迟时间函数

unsigned char *ms1="捕获标志:";
unsigned int start, end; // 上升和下降沿TAR
unsigned int overflow=0; // 溢出次数
unsigned int time=0; // 高电平时间

void Init_Clk(void); //初始化时钟

void main()
{
    Init_Clk();                 //初始化时钟
    Init_Lcd();                 //初始化LCD
    P2SEL |= BIT0;    //P2.0在第2功能,ACLK为32768/8HZ 00000001
    P2DIR |= BIT0;    //P2.0为输出,ACLK
    P1SEL |= BIT2;   //P1.2为功能模块TA1,捕获功能
    P1DIR &= ~BIT2;   //P1.2输入方向,作为捕获输入
    CCTL1 =CM0+SCS+CCIS_0+CAP+CCIE;
        //输入上升沿捕获,CCI1A为捕获信号,容许CCIE // 捕获中断
    TACTL =TASSEL_2+TACLR+TAIE+MC1 ;
        //定时器A时钟信号选择SMCLK,1MHz,
        //设置定时器A计数模式为连续增计模式
    _EINT(); //开中断
    Disp_HZ(0x80,ms1,10);

    while(1)
    {
        Time = end-start;
        //Time = (overflow*65535+(end-start));
        Disp_4num(0x90,Time);
        Disp_4num(0x88,end);
        Disp_4num(0x8c,start);
        Disp_4num(0x98,overflow);
    }
}



#pragma vector=TIMERA1_VECTOR //定时器A中断处理
__interrupt void timer_a(void)
{
    switch(TAIV) //向量查询
    {

    case 10: //定时器溢出中断
            overflow++;  //溢出计数加1
        break;
    case 2: //捕获中断, CCIFG1中断
        if(CCTL1&CM0) //上升沿
        {
            CCTL1=(CCTL1&(~CM0))|CM1; //更变设置为下降沿触发
            start=TAR; //记录初始时间
            overflow=0; //溢出计数变量复位,这句很关键的,想想为什么要这样复位?
        }
        else if (CCTL1&CM1) //下降沿
        {
            CCTL1=(CCTL1&(~CM1))|CM0; //更变设置为上升沿触发
            end=TAR; //用start, end, overflow计算脉冲宽度
        }
        break;

    default:
        break;
    }
}

void Init_Clk(void)
{
    unsigned int i;
    WDTCTL = WDTPW+WDTHOLD; //停止看门狗
    BCSCTL1 &= ~XT2OFF; //使TX2有效,TX2上电时默认为关闭的
    do
    {
        IFG1 &= ~OFIFG; //清振荡器失效标志
        for(i= 0xff; i>0; i--); //延时,待稳定.
    }
    while ((IFG1 & OFIFG)!=0); //若振荡器失效标志有效,一直等待

    BCSCTL2 |= SELM_2+DIVM_3; //使MCLK选择XT2且MCLK=XT2/8=1MHZ
    BCSCTL2 |= SELS+DIVS_3; //使SMCLK选择XT2且SMCLK=XT2/8=1MHZ
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
xiaochang1
1楼-- · 2019-07-15 18:11
哪位大神能解答一下
xiaochang1
2楼-- · 2019-07-15 19:43
问题已解决

一周热门 更多>