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.

[参考译文] MSP430FR6047:P3IN 示例不起作用。 请提供帮助。

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1248110/msp430fr6047-p3in-example-doesn-t-work-please-help

器件型号:MSP430FR6047

很难通过端口中断打破 while 循环。 当执行点位于此 while 循环内时、端口中断将不再起作用。

因此、当返回并试用 TI 提供的第一个示例代码时、如下所示:

//   Evan Wakefield
//   Texas Instruments Inc.
//   October 2016
//   Built with IAR Embedded Workbench V6.50 & Code Composer Studio V6.2
//******************************************************************************
#include <msp430.h>

int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;               // Stop watchdog timer

    // Configure GPIO
    P1DIR |= BIT0;                          // Set P1.0 to output direction

    // Disable the GPIO power-on default high-impedance mode to activate
    // previously configured port settings
    PM5CTL0 &= ~LOCKLPM5;

    while (1)                               // Test P1.3
    {
        if (P3IN & BIT0)
            P1OUT |= BIT0;                  // if P1.3 set, set P1.0
        else
            P1OUT &= ~BIT0;                 // else reset
    }
}

但即使我按 P3.0、P3IN 寄存器的值也始终为 FF。 发生什么事了?

在我的项目代码中、寄存器查看器中的寄存器值变为 FE。 但扫描代码中的值时没有相应更新。

3.在我项目的代码中,当在"while loop"之外执行时,"__interrupt void PORT3_ISR (void)"可以正常运行。 发生什么事了?

提前感谢您。

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

    您好!

    您测试了哪个示例代码?

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

    这是列表中的第一个样本、"msp430fr60x7_ta0_01.c"。 我对其进行了一些修改、以便适用于 P3.0。  

    但我所经历的现象真的很奇怪。 你不认为吗?

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

    尝试关闭优化。

    它几乎类似于 P3IN 没有被声明为易失性。

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

    如果我关闭了,但仍然没有运气。

    我甚至还补充了以下内容来确保这一点;

    P3SEL0=0;
    P3SEL1 = 0;
    P3DIR = 0;
    P3REN|=BIT0;

    它也没有帮助,正如你可以想象的。

    我通过另一种方法解决了我原来的问题。


    但它让我刮了我的头背。

    因为

    1. 端口3中断正常运行、待机、如

      #pragma vector=PORT3_Vector
    __interrupt void PORT3_ISR (void)

    2、我记得 很久以前运行这个代码时没有出现任何问题、也没有抖动去改变优化的东西。

    我知道我一定是在做一些错误的事情。 但我似乎无法找到它。

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

    您是否尝试了更多引脚?  如果您在多个引脚上遇到类似问题、很可能是代码问题。

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

    就像你认为我没有尝试更多的 pints 吗? 注意 我当然知道了。

    在我的项目中、我使用 P3.0、1、2和3作为按钮输入。 当它们不处于 while 循环中时、它们运行正常(我的意思是 PORT_ISR 正在工作。)。  

    您说"这很可能是代码问题。" 然后、请查看我自己演示的代码、如果有任何问题、请告诉我。 扫描 P3.0的简单代码。  

    让我来问一下。 您不认为在端口中断正常运行时 P3.0 TTO P3.3不改变值是很奇怪的吗? 我想这是我的问题的核心。 所以、请从这个角度来启发我。

    感谢您发送编修。

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

    代码意味着两件事。 第一个是高级 C 代码、第二个是 CPU 所执行的机器语言。 例如:

          while (1)                               // Test P1.3
        {
            if (P3IN & BIT0)
        445e:       d2 b3 20 02     bit.b   #1,     &0x0220 ;r3 As==01
        4462:       05 24           jz      $+12            ;abs 0x446e
    
    00004464 <.L8>:
                P1OUT |= BIT0;                  // if P1.3 set, set P1.0
        4464:       d2 d3 02 02     bis.b   #1,     &0x0202 ;r3 As==01
    
    00004468 <.Loc.46.1>:
            if (P3IN & BIT0)
        4468:       d2 b3 20 02     bit.b   #1,     &0x0220 ;r3 As==01
        446c:       fb 23           jnz     $-8             ;abs 0x4464
    
    0000446e <.L6>:
            else
                P1OUT &= ~BIT0;                 // else reset
        446e:       d2 c3 02 02     bic.b   #1,     &0x0202 ;r3 As==01
        4472:       f5 3f           jmp     $-20            ;abs 0x445e
    

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

    大卫。 感谢你的评分 但我相信代码没有问题。

    今天,我从家里回来,在那里我已经编码了整个上周的假期。 在办公室中、我有另一个完全相同的电路板。 从未加载过任何代码。 它就像开箱即用。

    我在此电路板上加载了相同的示例代码、运行正常、正如我预期的那样。

    所以、我怀疑我的项目代码执行了某种会削弱端口读取函数的操作。 我将在这个板上加载我的项目代码、然后查看这个板是否也发生了同样的情况。

    我会在测试后回来。

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

    我加载我的项目代码、然后再次加载示例代码。

    但这个正在按预期读取端口。  我不知道家里的电路板出了什么问题...

    好的、谢谢大家。