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.

[参考译文] MSP430FR2422:尝试使用 ISR 的 LED 闪烁

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/985686/msp430fr2422-led-blink-try-using-isr

器件型号:MSP430FR2422

您好,

我正在尝试使 P1.1上的定制板上的 LED 闪烁,而我的中断引脚是 P2.2。 因此、我的主要目标是打开 LED 并保持打开、直到中断出现。 此外,当我要检查中断时,我还将手动为 P2.2提供+5V 信号。

LED  ->  P1.1

中断引脚  -> P1.2

此代码未显示错误。但不知怎么说、这不起作用、您能帮助我解决这个问题吗?

这是我尝试过的代码


#include "driverlib.h"
#include
void main (void){

WDT_A_HOLD (WDT_A_base);
PMM_unlockLPM5 ();

//FRCTL0 = FRCTLPW | NWAITS_1;

//CS_setExternalClockSource (XT1CLK_FREQUENCY)(CS_DCORSEL_1、CS_DCOFSEL_4);

//配置时钟时间,因为中断应在中断调用中调用。
// CS ACLK 用于 clk,vloclk 用于 VLO,默认情况下 CS 时钟分频器为1
// MCLK 用于其它 MCLK,我已经完成了可选的操作。

CS_initClockSignal (CS_ACLK、CS_VLOCLK_select、CS_clock_divider);
CS_initClockSignal (CS_MCLK、CS_VLOCLK_select、CS_clock_divider);

//将 P1.1设置为输出、将 P1.2设置为中断引脚
GPIO_setAsInputPin (GPIO_PORT_P1、GPIO_PIN1);
//首先禁用中断,然后再启用中断
GPIO_DisableInterrupt (GPIO_PORT_P1、GPIO_PIN2);

//如果最初有中断标志,则清除所有中断标志
GPIO_clearInterrupt (GPIO_PORT_P1、GPIO_PIN2);

//希望中断在正边沿或负边沿上意味着什么

GPIO_selectInterruptEdge (GPIO_PORT_P1、GPIO_PIN2、GPIO_LOW_TO_HIGH_TRANSITION);
GPIO_enableInterrupt (GPIO_PORT_P1、GPIO_PIN2);//此处启用中断
_enable_interrupt ();//启用中断


while (1)



//现在从这里开始中断服务例程,在其中完成要执行的中断任务,但由于一些电源建议,它不会切换我们想要的 LED

#pragma vector = Port1_vector;
_interrupt void Port_1 (void)

GPIO_toggleOutputOnPin (GPIO_PORT_P1、GPIO_PIN1);
GPIO_clearInterrupt (GPIO_PORT_P1、GPIO_PIN2);
//如果我们没有清除中断,而不是相应交换机上的电源关闭,那么无论更改如何,它也将保持在中断中

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="480558" URL"~/support/microcontrollers/msp430/f/msp-low-power-microcontroller-forum/985686/msp430fr2422-led-blink-try-using-isr ]//将 P1.1设置为输出、将 P1.2设置为中断引脚
    GPIO_setAsInputPin (GPIO_PORT_P1、GPIO_PIN1);[/引用]

    该代码将 P1.1设置为输入 Put、而不是输出引脚。 尝试:

    // Set P1.1 as the output and P1.2 as the interrupt pin
    GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN1);

    [引用 userid="480558" URL"~/support/microcontrollers/msp430/f/msp-low-power-microcontroller-forum/985686/msp430fr2422-led-blink-try-using-isr "]当我要检查中断时,我还会手动为 P2.2提供+5V 信号。

    对引脚施加+5V 电压超出器件的绝对最大额定值、可能导致损坏:

    在+5V 信号和 P2.2之间是否有一个串联电阻器来将保护二极管电流限制在2mA 以下?

    有关   一些背景信息、请参阅《MSP430和 ESD 二极管电流规格连接(安全)》。

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

    1) 1)您的按钮是如何连接的? 具体而言(a)您是否有外部上拉或下拉电阻器? (b)它连接到什么引脚(您提到了 P1.2和 P2.2)?

    2)

    > GPIO_setAsInputPin (GPIO_PORT_P1、GPIO_PIN1);

    除非您有一个外部上拉/下拉电阻器(甚至可能是您这样做的)、否则您应该使用内部上拉/下拉电阻器、类似于:

    > GPIO_setAsInputPinWithPullUpResistor (GPIO_PORT_P1、GPIO_PIN2);// P1.2按钮作为输入/上拉

    3) 3)要使用 LED、您需要将其引脚配置为输出:

    > GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN1);      // P1.1 LED 作为输出

    > GPIO_setOutputLowOnPin (GPIO_PORT_P1、GPIO_PIN1); //初始关闭(高电平有效)

    4)  

    >#pragma vector = Port1_vector;

    删除末尾的分号 我不太确定预处理器会如何处理它、但它不属于它。

    ------------

    这里有一个示例(GPIO_ex2_inputCapture)、类似于您尝试执行的操作:

    http://dev.ti.com/tirex/explore/node?node=AFK0MVH-fBllg.vv1-P17g__IOGqZri__LATEST

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

    谢谢切斯特、这解决了我的问题。 我错误地取了输入、只是在 ISR 中找到了故障。