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.

[参考译文] MSP430FR2433:P1IFG 不会自动清除、并且可以#39;t 自行清除

Guru**** 2548800 points
Other Parts Discussed in Thread: MSP430FR2433

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1024704/msp430fr2433-p1ifg-not-auto-clearing-and-can-t-clear-it-myself

器件型号:MSP430FR2433

您好!

我在 IAR 中使用 MSP430FR2433。 我已将端口1.0设置为可中断输入(以每秒1个脉冲作为其输入)、设置为:ies = 0、DIR = 0、REN = 0、SEL0/1 = 00、IE = 1。

在我的中断中、我在下面进行了检查、以确认我的中断(1.0)已触发。 然后、我将增加我保留的时间、禁用中断、清除标志、然后重新启用中断。

根据我对数据表的理解、当我在 P1IV 中读取时、IFG 应自动清零。 但是、它不会自动清除。 当我在下面的 if 语句之后断点时、它仍然会被设置。 当我尝试自行清除标志时(如上所述)、它将不会从1变为0。

这会导致大量中断、从而使我无法进入代码的其余部分。 我很困惑。 我在这里缺少的东西是否会使我无法自动清除甚至直接清除标志?

请告诉我!

谢谢、

Natalie W

-------------- interrupts.c ----------------------------------------


#pragma vector=Port1_vector
_interrupt void Port1_interrupt (void){

/* SYS 1 PPS 中断*/
 if (P1IV && 0x02){
 CURRENT_PPS_TIME += 1;
 天花板= TA1CCR0;

 ADD_GGOS_PRODUCER_EVENT (SYS_1_PPS_TICK);  
 P1IE &=~(0x01);
 P1IFG &=~(0x01);
 P1IE |= 0x01;
 LPM3_EXIT;
 }  

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

    我很确定您更喜欢使用按位运算符:P1IV & 2。 如上所述、P1IV 中的任何非零值都将满足该条件。

    如果只有一个引脚启用了不会造成问题的中断。 端口中断是边沿敏感的、因此似乎有很多边沿。 一个开输入将实现该目的。 确保根据需要连接信号、以防万一、启用上拉/下拉电阻器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="215629" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1024704/msp430fr2433-p1ifg-not-auto-clearing-and-can-t-clear-it-myself/3787730 #3787730"]我很确定您更喜欢使用按位运算符:P1IV 和2。

    同意使用逻辑和看起来奇怪。

    由于 P1IV 不包含位掩码、而是最高优先级挂起中断的编码、因此认为它应该是一个比较。 即:

     if(P1IV == 0x02){

    同意代码中看不到任何解释观察到的行为的内容、因此可能是输入端看到大量边沿的问题。

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

    感谢您的意见!! 我的逻辑电路是关闭的、你肯定是对的、需要按位和运算符。

    这有帮助、但不是我的问题的根源-我发现 PM5CTL0寄存器中的 LOCKLPM5位被置位。 清零该位允许我按预期清除中断标志。