基于msp430g2553单片机的程序,无法进入捕获中断服务程序

基于msp430g2553单片机的程序,无法进入捕获中断服务程序,第1张

所谓捕获,就是我们来检测外围的信号跳变时刻(此时信号理解为数字信号,即脉冲),此信号乃为我们捕获的对象,可以测量信号的脉冲宽度,即频率等。

CCIS_0,你的输入源是CCIxA,不知道你的输入源有信号变化没有,没有变化的话肯定是捕获不到的。

另外看到你程序语句中,TA0CCR0 = 1000你应该是想用比较模式吧。。。

时钟初始化子程序实现了DCO的锁频,ADC10初始化子程序采用了序列通道多次采样和DTC数据转存。写这程序的人对MSP430蛮了解的!

void init_Clk (void)

{

unsigned int Compare, Oldcapture = 0

// ACLK= LFXT1CLK/8为低频振荡器32768HZ频率/8作为辅助系统时钟

BCSCTL1 |= DIVA_3

CCTL2 = CM_1 + CCIS_1 + CAP//上升沿捕获+CCI2B(P2.4)信号输入+捕获模式

// SMCLK

TACTL = TASSEL_2 + MC_2 + TACLR//TA时钟为SMCLK,增计数模式,计数器清零

//DCO锁频,使得DCO时钟频率与P2.4信号频率相同

while (1)

{

//等待捕获发生

while (!(CCIFG &CCTL2)) //P2.4信号有上升沿跳出while

//清除标志

CCTL2 &= ~CCIFG

//得到当前的SMCLK

Compare = CCR2

//SMCLK的差

Compare = Compare - Oldcapture

//保存

Oldcapture = CCR2

if (DELTA == Compare) break//DELTA=高电平脉宽

else if (DELTA <Compare)//DELTA<高电平脉宽

{

DCOCTL--//通过改变DCO直流发生器注入电流及插入的Fdco+1来微调降低DCO时钟频率

if (DCOCTL == 0xFF)//微调降到最低了,同时设置为最高

{

if (!(BCSCTL1 == (XT2OFF + DIVA_3)))//粗调降到最低了

{

BCSCTL1--//通过改变DCO内部阻容振荡电阻来粗调降低DCO时钟频率

}

}

}

else

{

DCOCTL++//通过改变DCO直流发生器注入电流及插入的Fdco+1来微调提升DCO时钟频率

if (DCOCTL == 0x00)//微调升到最高了,同时设置为最低

{

if (!(BCSCTL1 == (XT2OFF + DIVA_3 + 0x07)))//粗调升到最高了

{

BCSCTL1++//通过改变DCO内部阻容振荡电阻来粗调升高DCO时钟频率

}

}

}

}

//停止CCR2

CCTL2 = 0

//停止定时器A

TACTL = 0

}

void init_ADC(void)

{

//停止转换

ADC10CTL0 &= ~ENC

//模拟输入使能A0--A2 (P2.0---P2.2)

ADC10AE |= 0x07

//模拟采集设置

//基准选择VR+=Vref+,VR-=AVSS

//AD时钟选择 64 x ADC10CLKs

//AD10供电

//AD中断允许

//内部参考电压(1.2V)允许并输出

ADC10CTL0 = SREF_1 + ADC10SHT_3

+ ADC10ON + ADC10IE + REFON + REFOUT

//采集通道设置

//首次采样通道A2

//采样时钟TAout2

//序列通道连续采样

ADC10CTL1 = INCH_2 + SHS_3 + CONSEQ_3

//清除BUSY位,转换完成跳出

while( ADC10CTL1 &BUSY ){}

//数据传递继续

ADC10DTC0 |= ADC10CT

//ADC块大小

ADC10DTC1 = 3

//ADC块的开始地址

ADC10SA = (unsigned int)AdcData

//打开转换

ADC10CTL0 |= ENC

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7827588.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存