工程师:
你好,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:
初始化比较器模块也清楚一下中断标志位。