【问题标题】:How do I enable/disable interrupts in the mspgcc using C?如何使用 C 在 mspgcc 中启用/禁用中断?
【发布时间】:2013-10-10 11:48:16
【问题描述】:

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

【问题讨论】:

  • @user694733:不是重复的。 MSP430 中的 GIE SR 位通常不使用简单的按位运算符访问,因为在 C 中没有定义表示状态寄存器的符号。
  • 这不是重复的,因为状态寄存器 (SR) 是处理器寄存器,而不是普通的内存映射寄存器。我找到了解决方案,见下文。

标签: c msp430 mspgcc


【解决方案1】:
/*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/

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我正在使用mspgcc,我得到fatal error: intrinsics.h: No such file or directory,同样__eint()__dint() 产生错误。
    • @tylerjw:你使用的是什么版本的 mspgcc?您可能应该将该信息添加到问题中,因为它会改变答案的有效性。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多