abcfanyuan 发表于 2012-8-10 00:45:39

MSP430 捕获模式无法进入中断求解

要写一个超声波测距的程序。
选用430的TimerA 的CCR1捕获
程序如下:
#include <msp430x16x.h>
#include"HCSR04.h "
#define uchar unsigned char
#define uintunsigned int
#defineRISE1
#defineFALL0
unsigned char Edge=1;//当前触发沿
uint m=0,temp,p,g=0;
double s;
float l;
uchar j=0;
unsigned long int t;

void Init_CLK(void)
{
   unsigned int iq0;
   BCSCTL1&=~0X00;      //打开XT2振荡器
   do
   {
      IFG1 &= ~OFIFG;   // 清除振荡器失效标志
      for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振
    }
    while ((IFG1 & OFIFG) != 0);    // 判断XT2是否起振
    BCSCTL2 =SELM_2+SELS;   //选择MCLK、SMCLK为XT2
}

void Init_TA(void)//工作在捕获模式
{
    TACTL |=TASSEL_2+ID_3+MC0+TACLR+TAIE;//8M主系统时钟8分频1M1us 增计数
    CCTL1 =CM0+CCIS_0+SCS+CAP+CCIE;//上升沿捕获 CCIA10 同步 捕获模式 开启中断允许
    CCR0=50000; // 计时为0.05s
    CCTL1 &=~CCIFG;// 清除CCR1中断标志
    TACTL &=~TAIFG;// 清除定时器溢出中断标志
}

void Init_IO(void)
{
    P1DIR &=~BIT2;
    P1SEL |=BIT2;//输入模式捕获
   
    P1DIR |=BIT4;
    P1SEL |=BIT4;//输入模式捕获
   
   
    P3DIR |=BIT6;//超声波配置
    P3SEL &=~BIT6;
    P3OUT &=~BIT6; // 给控制端开始低电平
   

}
void Send_Signal(void)
{
//P1OUT &=~BIT4;
SET_TRIG;
Delay_us(20);
CLR_TRIG;

}



void Delay_us(uchar n)
{
for(uchar p=0;p<n;p++)
for(uchar i=0;i<8;i++);
}

void main( void )
{

// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
Init_CLK();
Init_TA();
Init_IO();
_EINT();
while(1)
{
      Send_Signal();
}
}

#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_a1(void)
{

       switch(TAIV)
       {
         case 2 :
               if(Edge==RISE)
                            {
                              temp= TACCR1; // temp=TAR;
                              TACCTL1 |= CAP+CM_2+CCIS_0+SCS+CCIE;//改为下降沿捕获
                              Edge = FALL;//下降沿捕获标志
                              j++;
                              break;
                           }
                  else
                            {
                              _DINT();
                              temp= TACCR1;
                              TACCR1 = 0;
                              TACCTL1|= CAP+CM_1+CCIS_0+SCS+CCIE;//改为上升沿捕获
                              Edge = RISE;//上升沿捕获标志
                              j++;
                              _EINT();
                            }
          case 10 : m++; break;
          case 4 : break;
         
      }
      
      if(j==2)
      {
            if(temp<temp) m--;
            p=temp-temp;
            j=0;
            t=p+m*50000;
            m=0;
          }
CCTL1 &=~CCIFG;// 清除CCR1中断标志
TACTL &=~TAIFG;// 清除定时器溢出中断标志
}

我给捕获控制IO输入的是1K赫兹的方波。但是一直无法进入 TAIV的2 就是CCR1捕获中断。
不知道是什么原因,求高手讲解。
还有就是TAIV 中的TAIFG 就是是10 和定时器TACTL中的TAIFG(定时器溢出位)有什么区别?

abcfanyuan 发表于 2012-8-10 00:46:36

深知深夜发帖会沉的,但是还是顶顶。希望大家帮帮指点一二

abcfanyuan 发表于 2012-8-10 11:23:04

晚上发帖真的伤不起呀。

abcfanyuan 发表于 2012-8-10 21:41:08

{:sad:}木有人、、
页: [1]
查看完整版本: MSP430 捕获模式无法进入中断求解