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:P2 IO IRQ 未触发

Guru**** 2553450 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/592922/msp430fr2311-p2-io-irq-not-firing

器件型号:MSP430FR2311

大家好、

我正在尝试使用 P2.2编写一个简单的边沿检测器。 该引脚连接到另一个电路的旁路电容器、该电容器与运行此代码的处理器分开供电。  

当我运行代码并在主代码中写入 P2IFG BIT2时、我可以强制 IRS 运行、但当我给外部电路加电时、它不运行。 我可以(通过调试器)看到 P2位2从低电平变为高电平、为什么 ISR 不会触发?  

这是初始化代码。

void NFC_WAKEUP_init (void)
{
// P2.2是来自 NFC 芯片的2倍输入
当 NFC 通电时、//应从零转换到大约3V
//进行输入
//使主功能 GPIO
//设置中断
Detected = false;
P2SEL0 &=~BIT2;
P2SEL1 &=~BIT2;
P2DIR &=~BIT2; //将 P2.2设置为输入方向
//P2OUT &=~BIT2; //设置下拉
//P2REN |= BIT2; // P2.2上拉寄存器使能
P2IES &=~BIT2; // P2.2从低电平到高电平转换
P2IFG &=~BIT2; //清除 P2.2 IFG
P2IE |= BIT2; //启用 P2.2中断

}

这是中断代码

#pragma vector=port2_vector
__interrupt void Port_2 (void)
{
//检查 IES 位
if (0 =(P2IES | BIT2)){//低电平到高电平意味着 NFC 上电
P2IES |= BIT2; //现在监视高到低
Detected = true;
//开始计时器轮询 IAA
}
否则{ //从高到低意味着 NFC 掉电
P2IES &=~BIT2; //现在监视低到高
Detected = false;
//停止时间 ISR
}
P2IFG &=~BIT2; //清除 P2.2 IFG
}

主代码仅循环等待检测到的 var 更改。

任何想法 都很有帮助、感谢您花时间浏览我的代码。

Steve

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

    您的设置代码正确。 您是否启用了常规中断?

    此外、为了验证硬件、您是否可以直接将 P2.2引脚触摸到0V、然后是3.3V? 我始终在中断上设置一个断点、并确保在引脚上直接更改时触发中断。

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

     >   if(0 == (P2IES | BIT2)) {  // low to high means nfc powered up

    This will never be true. Maybe(?) you wanted

    >    if(0 == (P2IES & BIT2)) {  // low to high means nfc powered up

    还要确保"检测到"被声明为"易失性"。

     

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

    你好、Nima、

    是的、我启用 gie。 此外,我测量了引脚上的电压,从0开始,然后转换到3.3,我还可以看到它反映在 P2IN 中。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、谢谢、我的意思是"&"、但我从未达到这一点、因为 ISR 从未触发。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    代码中是否有其他任何地方可以访问 P2IE、P2DIR 或任何其他 P2寄存器? 我正在尝试确保它不会在代码中的其他位置被覆盖。

    除此之外、初始化代码是正确的、如果 GIE 被置位、那么中断应该发生。
    您如何进行测试以确保中断是否已触发?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我即将要学习的一件事(对 TI 来说是新的) 是、用户手册中的内容与数据表中的内容相匹配。。。。在我将我的头打断一周后、我发现并非所有输入都可配置为中断。

    P1的所有输入和 P2的四个输入(P2.0、P2.1、P2.6、P2.7)可被配置为边沿可选
    中断以及 LPM3.5、LPM4、和 LPM4.5唤醒输入功能。 

    P2.2不在 list..now 中用于电路板开发。感谢 TI

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    功能方框图:
    I/O 端口 P1 (1×8 IO)
    P2 (1x4 IOS)
    中断和唤醒

    这一点对于16引脚 QFN 非常正确

    但 TSSOP20版本具有四个以上的 P2.x 引脚
    但我想这些额外的 P2引脚不是全速 IRQ 引脚、只支持您自己触发 IFG 标志。

    P2.0、P2.1、P2.6和 P2.7支持引脚和软件中断。 其他端口仅支持软件中断。