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(定时器溢出位)有什么区别?
深知深夜发帖会沉的,但是还是顶顶。希望大家帮帮指点一二 晚上发帖真的伤不起呀。 {:sad:}木有人、、
页:
[1]