1

如何GIE SR使用 C 在 C 中启用和禁用(清除和设置位)mspgcc

4

3 回答 3

3
/*interrupt.c
ganeshredcobra@gmail.com
GPL
*/
#include <msp430g2553.h>
#define LED1 BIT0
#define LED2 BIT6
#define BUTTON BIT3
volatile unsigned int i;//to prevent optimization
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
P1DIR |= (LED1+LED2);//
P1OUT &= ~(LED1+LED2);
P1IE |= BUTTON;
P1IFG &= ~BUTTON;

//__enable_interrupt();//enable all interrupts
_BIS_SR(LPM4_bits+GIE);
for(;;)
{}
}

//port1 interrupt service routine
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
P1OUT ^= (LED1+LED2);
P1IFG &= ~BUTTON;
P1IES ^= BUTTON;
}

这是一个中断示例 http://importgeek.wordpress.com/tag/msp430-launchpad/

于 2013-10-10T12:31:41.467 回答
1

您可以使用 __eint() / __dint() 内在函数:

#include <intrinsics.h>
...
    __eint();
    /* Interrupts enabled */
    __dint();
    /* Interrupts disabled */

或者您可以使用 __bis_status_register() / __bic_status_register() 内在函数:

#include <msp430.h>
#include <intrinsics.h>
...
    __bis_status_register(GIE);
    /* Interrupts enabled */
    __bic_status_register(GIE);
    /* Interrupts disabled */

或intrinsics.h 中的许多其他兼容性定义之一。请注意,还有一些特殊版本,例如 __bis_status_register_on_exit() / __bic_status_register_on_exit() 会在退出 ISR 时更改标志的状态。

于 2013-10-10T12:15:52.817 回答
1

通过实验,我发现它可以在不包括标准文件的情况下启用_BIS_SR(GIE);和禁用。_BIC_SR(GIE);msp430g2553.h

于 2013-10-10T12:22:10.803 回答