如何使用GIE
在C中启用和停用(清除并设置SR
mspgcc
位)?
答案 0 :(得分: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/
答案 1 :(得分: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时更改标志的状态。
答案 2 :(得分:0)
通过实验,我发现可以使用_BIS_SR(GIE);
启用它,并使用_BIC_SR(GIE);
禁用,但不包含标准msp430g2553.h
文件以外的任何内容。