TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430f149捕获10KHZ的频率

#include "msp430f149.h"
#include"oled1.h"
//#include"in430.h"

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

static unsigned int new_cap,old_cap,diff_cap,aver_cap,index,count=0,t,num;
static unsigned int diff_array[16],cap_array[16];

void main( void )
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT

LCD12864_Init(); //初始化时钟

P1SEL |= BIT1;
P2SEL |= BIT0;
P2SEL |= BIT0;
CCTL0 = CM_1+SCS+CAP+CCIE;
TACTL = TACLR+TASSEL_2+MC_2;+TAIE;
_EINT();

while(1)
{
lcd_show_long_num(6,0,1,3,1,100000,t);
}
}

// Timer A0 interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0 (void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(TIMERA0_VECTOR))) Timer_A0 (void)
#else
#error Compiler not supported!
#endif
{
new_cap=TACCR0;
num++;
t = 65536*count+new_cap-old_cap+1;
lcd_show_long_num(6,0,5,3,1,100000,t);
diff_cap=new_cap-old_cap;
cap_array[index]=new_cap;
diff_array[index++]=diff_cap;
aver_cap+=diff_cap;
old_cap=new_cap;
if (index==16)
{
aver_cap/=16;
index=0;
}
/* if(num==2)
{
num=0;
_DINT();
}*/
}

// Timer_A3 Interrupt Vector (TAIV) handler
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(TIMERA1_VECTOR))) Timer_A1 (void)
#else
#error Compiler not supported!
#endif
{
switch( TAIV )
{
case 10: count++; // Timer_A3 overflow
break;
default: break;
}
}

以下标注内容为 一位TI员工的解答:

/********************************************************************

楼主,

    其实你可以使能定时器的溢出中断,在TAR到达0xFFFF的时候将一个计数变量加1,比如count++;,当第二个捕捉中断到来之后做一个运算:

(65535-第一次捕捉的数值)+65535*count+第二次捕捉的数值

***********************************************************************/

以上标注内容为 一位TI员工的解答:

下面是我发的疑问:

        由于CCR0的中断优先级大于定时器溢出中断(定时器中最低的中断),,所以即使定时器溢出也不会进入定时器溢出中断使得count++,因为我CCRO一直是运行,

Maka Luo:

CCR0中断和溢出中断,这是两个完全不同中断标志位,没有冲突。

Ling Zhu2:

 还有一种办法就是 把所测的信号接到定时器的时钟输入。

qingsong tan:

回复 Maka Luo:

这个是TI430上面的资料显示的,按道理,,他们两个之间是有优先级顺序的吧,,(这是我个人目前的理解哈),,

qingsong tan:

回复 qingsong tan:

这个是我仿真的结果,,始终没进入定时器溢出中断里面,,

结合上面的问题,,可以给我一个合理的解释吗,,谢谢。。

赞(0)
未经允许不得转载:TI中文支持网 » MSP430f149捕获10KHZ的频率
分享到: 更多 (0)