|
[tr][td]/时钟设置/
void init_MCLK()
{
uchar i;
WDTCTL = WDTPW + WDTHOLD;//关闭看门狗
BCSCTL1&=~ XT2OFF; //msp430f149 选择XT2频率
do//
{
IFG1 &= ~OFIFG; // 清除晶振失败标志
for (i =0xFF;i>0;i--); //等待8MHz晶体起振
}
while ((IFG1 & OFIFG));
BCSCTL2 |= (SELM_2 + DIVM_0 + SELS+DIVS_0); // SMCK=MCLK=8MHz
}
/捕获方式设置/
void cap_init()
{
P1SEL|=BIT2; // 设置 P1.2为第二功能引脚TA1
P1DIR&=~BIT2; // 设置P1.2为输入引脚
TACTL = TASSEL_2 + MC_2+ID_0+TAIE; //ACLK辅助时钟,计数时钟为8MHz,计数方式为连续计数 ,TAIE允许定时器溢出标志
CCTL1 |= CAP+CM_1 + SCS + CCIS_0+ CCIE; //上升沿捕获,同步,CCI0A(P1.2信号源),捕获功能,中断允许
TACCR1 = 0;
}
#pragma vector=TIMERA1_VECTOR//捕获中断子程序
__interrupt void TimerA1(void)
{
switch(TAIV)
{
case 2://比较/捕获模块1中断
period=TA_ov_num*65536+TACCR1-old_cap;
old_cap=TACCR1;
TA_ov_num=0;
break;
case 4:break;//比较/捕获模块2中断未用
case 10:TA_ov_num++;
break;
}
}
麻烦帮看看我上面几个模块,我的设计是通过定时器A模块捕获P1.2输入的信号,达到测频率的目的,可是上面的程序,period一直为0,感觉像是没有捕获到信号
|
|