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

如何使用C启用/禁用mspgcc中的中断?,c,msp430,mspgcc,C,Msp430,Mspgcc,如何使用mspgcc启用和禁用C中的清除和设置GIE SR位?您可以使用_ueint/_udint intrinsic: #include <intrinsics.h> ... __eint(); /* Interrupts enabled */ __dint(); /* Interrupts disabled */ #include <msp430.h> #include <intrinsics.h> ... __b

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

您可以使用_ueint/_udint intrinsic:

#include <intrinsics.h>
...
    __eint();
    /* Interrupts enabled */
    __dint();
    /* Interrupts disabled */
#include <msp430.h>
#include <intrinsics.h>
...
    __bis_status_register(GIE);
    /* Interrupts enabled */
    __bic_status_register(GIE);
    /* Interrupts disabled */
或者您可以使用_bis_status_register/_bic_status_register intrinsic:

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

或者intrinsics.h中的许多其他兼容性定义之一。请注意,还有一些特殊版本,如退出时的uu bis status u register u/u bic status u register u on u exit,它将更改ISR退出时的标志状态。

您可以使用u eint/u ding内部函数:

#include <intrinsics.h>
...
    __eint();
    /* Interrupts enabled */
    __dint();
    /* Interrupts disabled */
#include <msp430.h>
#include <intrinsics.h>
...
    __bis_status_register(GIE);
    /* Interrupts enabled */
    __bic_status_register(GIE);
    /* Interrupts disabled */
或者您可以使用_bis_status_register/_bic_status_register intrinsic:

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

或者intrinsics.h中的许多其他兼容性定义之一。请注意,还有一些特殊版本,如退出时的uuu bis\u status\u register\u/退出时的uu bic\u status\u register\u,它将更改ISR退出时的标志状态。

通过实验,我发现它可以通过bis\u SRGIE启用;和残疾与_BIC_SRGIE;除了标准的msp430g2553.h文件外,不包含任何内容。

通过实验,我发现它可以通过_BIS_SRGIE启用;和残疾与_BIC_SRGIE;除了标准msp430g2553.h文件外,不包含任何内容

这是一个中断的例子

这是一个中断的例子

可能重复:@user694733:不是重复。MSP430中的GIE SR位通常不使用简单的按位运算符访问,因为C中没有定义表示状态寄存器的符号。这不是重复的,因为状态寄存器SR是处理器寄存器,而不是普通内存映射寄存器。我找到了解决方案,请参见下面。可能重复:@user694733:不是重复的。MSP430中的GIE SR位通常不使用简单的按位运算符访问,因为C中没有定义表示状态寄存器的符号。这不是重复的,因为状态寄存器SR是处理器寄存器,而不是普通内存映射寄存器。我找到了解决方案,请参见下文。我正在使用mspgcc,但出现了致命错误:intrinsics。h:没有这样的文件或目录,而且u______________________________________?您可能应该将这些信息添加到问题中,因为这会改变答案的有效性。我使用的是mspgcc,但出现了致命错误:intrinsics。h:没有这样的文件或目录,而且u______________________________________?您可能应该将该信息添加到问题中,因为它会改变答案的有效性。