繁体   English   中英

如何使用C启用/禁用mspgcc中的中断?

[英]How do I enable/disable interrupts in the mspgcc using C?

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

/*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/

您可以使用__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时更改标志的状态。

通过实验,我发现它可以用_BIS_SR(GIE);启用_BIS_SR(GIE); 并使用_BIC_SR(GIE);禁用_BIC_SR(GIE); 除了标准的msp430g2553.h文件外,不包含任何内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM