我用TA的捕获比较器,捕获ALK,MCLK,SMCLK的频率大小,在测ACLK时,频率正确,MCLK,SMCLK时候就不准确。。有局限性吗?
#include<msp430x14x.h>
#define uint unsigned int
#define uchar unsigned char
uint new_cap=0;
uint old_cap=0;
uint cap_diff=0;
uint diff_array[16];
uint capture_array[16]; //RAM中的数组用于存放数据
uchar index=0;
uchar count=0;
void main(void)
{
volatile uint i;
WDTCTL=WDTPW+WDTHOLD;
BCSCTL1&=~XT2OFF;
do
{
IFG1&=~OFIFG;
for(i=0xff;i>0;i--);
}
while((IFG1&OFIFG));
for(i=0;i<20000;i++);//延迟让晶振起振稳定
BCSCTL2=SELS;//SMCLK 选择XT2
P5DIR|=BIT4;
P5SEL|=BIT4;
//P5DIR|=BIT4+BIT5+BIT6;
//P5SEL|=BIT4+BIT5+BIT6;
//定义P5.4MCLK,P5.5SMCLK,P5.6ALCK
P1DIR=BIT0;//P1.0输出,P1.1输入
P1OUT&=~BIT0;//清除P1.0,复位
P1SEL=BIT1;//P1.1 TA0特殊功能引脚
CCTL0=CM_1+SCS+CCIS_0+CAP+CCIE;
//上升沿捕获+捕获模式的输入源为定时器A+同步捕获+捕获中断允许
TACTL=TASSEL_2+MC_2;//SMCLK为定时器A时钟源,连续计数模式
_BIS_SR(LPM0_bits+GIE);
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0(void)
{
volatile uint j;
new_cap=TACCR0;
cap_diff=new_cap-old_cap;
diff_array[index]=cap_diff;
capture_array[index++]=new_cap;
if(index==16)
{
index=0;
P1OUT^=BIT0;
for(j=50000;j>0;j--);
}
old_cap=new_cap;
count++;
if(count==32)
{
count=0;
_NOP();//这里设置断点
}
}
此帖出自
小平头技术问答
一周热门 更多>