在MSP-TS430PN80的目标板上用MSP430F2619的芯片,采用4M的外部晶振,定时器timerB无法准确捕捉到高于20K的频率,请问是哪里出现了问题?
程序代码如下:
void SetupClock()
{
uint16_t tmpv;
BCSCTL1 &= ~XT2OFF; //开启外部振荡器
BCSCTL3 |= XT2S_2; //选择频率范围3- to 16-MHz
do
{
IFG1 &= ~OFIFG; //清除晶振失效标志
for (tmpv = 0xff; tmpv > 0; tmpv--);
}
while((BCSCTL3 & XT2OF) == 1); //*等待外部晶振就绪
BCSCTL2 |= SELM_2+SELS; //选择MCLK,选择SMCLK //+DIVM_1
}
void Capture_Pos(void)//TIMER_B 捕获/比较寄存器 0
{
TB0CTL |= TBSSEL_2 + ID_0 + MC_2 + TBCLR + TBIE;
TBCCTL0 = CM_1+CCIS_1+SCS+CAP+CCIE;//T,上升沿触发,同步捕获,使能中断CCI1A
}
#pragma vector = TIMERB0_VECTOR
__interrupt void Timer_B0 (void)
{
static double Pre_T_Frequency = 0;
if(TBCCTL0 & CM0)
{
T_CaptureNum++;
if(T_CaptureNum == 1)
{
T_cap_count_first = TBCCR0;
}else if(T_CaptureNum >= 2)
{
T_cap_count_second = TBCCR0;
if(T_cap_count_second>T_cap_count_first)
{
T_count_num = T_cap_count_second-T_cap_count_first;
}else{
T_count_num = 0xFFFF+T_cap_count_second-T_cap_count_first;
}
T_Frequency = ((float)4000000)/T_count_num;
T_CaptureNum = 0;
if(T_Frequency != Pre_T_Frequency)
{
Pre_T_Frequency = T_Frequency;
}else{
close_T_capture();
}
}
}
}