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

MSP430f5310比较器B问题,一直在中断循环。

工程师:

            你好,MSP430比较器B,程序运行一直在中断中循环不跳出来,我选择的上升沿中断,电压设置的是1.5v,程序采用的是ti官方程序,只是把比较的管脚改了一下。其他的没有变动。现象:外部比较器的引脚为低电平时,就一直循环在中断中;如果外部比较器引脚是高电平,就可以退出中断?这个现象不对啊?为什么低电平会一直循环在中断中。程序见下图。

#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop WDT
P4DIR |= BIT7; // P1.0/LED output direction
// Setup ComparatorB CBCTL0 |= CBIPEN | CBIPSEL_3; // Enable V+, input channel CB0 CBCTL1 |= CBPWRMD_1; // normal power mode CBCTL2 |= CBRSEL; // VREF is applied to -terminal CBCTL2 |= CBRS_3|CBREFL_1; // R-ladder off; bandgap ref voltage (1.2V)
// supplied ref amplifier to get Vcref=1.5V (CBREFL_2) CBCTL3 |= BIT3; // Input Buffer Disable @P6.0/CB0

__delay_cycles(75); // delay for the reference to settle
CBINT &= ~(CBIFG | CBIIFG); // Clear any errant interrupts CBINT |= CBIE; // Enable CompB Interrupt on rising edge of CBIFG (CBIES=0)
CBCTL1 |= CBON; // Turn On ComparatorB __bis_SR_register(GIE); // Enter LPM4 with inetrrupts enabled
while(1); // For debug}

#pragma vector=COMP_B_VECTOR
__interrupt void Comp_B_ISR (void)

{
// CBCTL1 ^= CBIES; // Toggles interrupt edge
CBINT &= ~CBIFG; // Clear Interrupt flag
P4OUT ^= 0x80; // Toggle P1.0

}

Maka Luo:

在调试过程,你讲断点设置在while(1),编译器可能会出现异常,停留的位置不是真实的位置。

建议加while(1) 添加一些代码试试。

灰小子:

while(1)后面加个_NOP()

user4234806:

回复 灰小子:

这个方法,可以,你好我想知道为什么我比较器b,一开启,就会进入中断。不知道为什么,我用的比较器上升沿。程序一执行CBCTL1  |=CBON,就会进入中断

Maka Luo:

回复 user4234806:

初始化比较器模块也清楚一下中断标志位。

赞(0)
未经允许不得转载:TI中文支持网 » MSP430f5310比较器B问题,一直在中断循环。
分享到: 更多 (0)