This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR2311:未生成GPIO端口2.2 中断

Guru**** 2582405 points
Other Parts Discussed in Thread: MSP430FR2311

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/615159/msp430fr2311-gpio-port-2-2-interrupt-not-generated

部件号:MSP430FR2311

大家好,

我最近购买了MSP430FR2311 LaunchPad板。 我写了一个程序在按下板载按钮(WFP 1.0 1.1)时切换板载LED指示灯(WFP LED)。 编写程序是为了生成端口1中断

在ISR内部,我编写了用于切换LED的代码。 测试时,此工作正常。

现在,我刚刚通过为WFP 1.5 和WFP 2.2 编写相同的LED开关来扩展程序。 我连接了另外两个带有上拉电阻器的外部按钮。 在运行该程序时,我得到了与预期的一样的1.5 和WFP 1.1 中断,但对于WFP 2.2 按钮,却没有生成中断。  

在调试P2IN寄存器时,我能够在未按下按钮(上拉模式)时看到第三位处于设置状态,在按下该位处于重置状态时,但不确定为什么不生成中断。

有人能帮我弄清楚这里发生了什么吗? 我将粘贴下面的代码以供参考  

此外,我还有一个澄清。 MSP430FR2311 Launchpad中提供的P1的几个GPIO引脚的名称是I/O! 离Pins和WFP很近,2.2 有I/O没有! 这意味着什么? 我的假设是I/O! 默认情况下,是指上拉,而I/O是指下拉。 我的假设是否正确?

int main (void)
{
WDTCTL = WDTPW | WDTHOLD; //停止WDT

P1DIR || BIT0;
P1OUT |= BIT0;

PM5CTL0 &=~LOCKLPM2;

//配置WFP 1.1 和WFP 1.5
P1REN || BIT1 + BIT5;
P1OUT || BIT1+ BIT5;
P1IE |= BIT1+ BIT5;
P1IES |= BIT1+ BIT5;
P1IFG &=~BIT1+ BIT5;

//配置WFP 2.2
P2REN |= BIIT2;
P2OUT || BIIT2;
P2IE |= BIIT2;
P2IES |= BIIT2;
P2IFG &=~BIT2;

_ BIS_SR (GIE);

while (1);

}

#pragma vector = Port1_vector
__interrupt void Port1_ISR(void)
{
开关(__偶 数_IN_RANGE (P1IV,P1IV_P1IFG0))
{
CASE P1IV_P1IFG1://按钮S1已按下
{
P1OUT ^= BIT0;
}
中断;
CASE P1IV_P1IFG5://按钮S2已按下
{
P1OUT ^= BIT0;
}
中断;
默认:
{
}
中断;
}
}

#pragma vector = port2_vector
__interrupt void port2_isr(void){

开关(__偶 数_IN_RANGE (P2IV,P2IV_P2IFG0))
{
Case P2IV_P2IFG2://按钮S3已按下
{
P1OUT ^= BIT0;
}
中断;

默认:
{
}
中断;
}
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    __偶 数_IN_RANGE的第二个参数错误。

    "!" 表示具有中断功能的引脚。