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

单片机是F5529,用定时器A捕获功能时的一些问题

我用捕获功能测试脉宽,单片机是MSP430F5529LP(捕获管脚在P1.2和P1.3),   时钟选择的SMCLK(默认1MHZ),然后选择的捕获源是CCIXA对应的应该是P1.2,然后这是我的一段代码,不知道哪里出了问题,我捕获一个50KHZ,占空比为50%的方波一直捕获不到!

#include <msp430.h>#define uchar unsigned char
#define uint unsigned int
uint start,end,cha;

void main(){

WDTCTL = WDTPW+WDTHOLD;
P1SEL|=BIT2;
TA0CCTL1 |=CAP+CM_3+CCIS_0+SCS+CCIE;//捕获模式,上升和下降都捕获,选择CCI2A,同步,捕获中断开
TA0CTL |= TASSEL_2 + MC_2; //SMCLK=1M,连续计数模式_EINT();
LPM0;while(1);

}

#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void){
switch(TA0IV) {
case 2:
if(TA0CCTL1&CCI) start=TA0CCR1; else end=TA0CCR1; cha=start-end;
break;
default:break;
}
LPM0_EXIT;
}

Fuchong Wang:

增大MCLK试试看?

没仔细算,50k——100K不小呀

Fuchong Wang:

增大MCLK试试看,也许100K也就是10us,也许很紧张呀,没仔细算,中断本身延时多少个MCLK的来着?

if(TA0CCTL1&CCI) start=TA0CCR1; else 

{end=TA0CCR1; cha=start-end;

}

是不是少{}号?否则上升沿也要计算?

james may:

回复 Fuchong Wang:

已经找到原因了,是中断向量的问题。。。

pengcheng zhang1:

回复 james may:

你好,能介绍一下你是怎么解决的么,我也遇到了同样的问题

Fuchong Wang:

回复 pengcheng zhang1:

根据楼主自己的回答,

应该改成#pragma vector=TIMER0_A1_VECTOR

这玩艺是在开发环境软件包含的头文件中定义的,不是经常使用,很容易记不住混淆。记不太清楚了,好像对于不同器件定义所使用的默认规则有时候好像还不太一样,例如对于配置特别低的型号,这就可能往往引起混淆不清。

所以,作为保守态度,最好要跳转到头文件中核实一下,往往对照头文件中的注释就可确定。跳转查看的方法可以利用开发环境的功能查看定义。

一般有这样的形式:

TIMERx_Ay_VECTOR

其中x由定时器的数目定,注意是定时期的数目而不是一个定时期的CCR模块数目定

y只能为0或1,定时器的CCR0模块的中端向量地址是单独的,其它模块和定时计数器本身公用一个

yang he3:

回复 james may:

能解释一下吗,我用捕捉一直都没调出来

赞(0)
未经允许不得转载:TI中文支持网 » 单片机是F5529,用定时器A捕获功能时的一些问题
分享到: 更多 (0)