MSP430: попытка обучения прерываниям с помощью мигания кнопки и светодиода

Я впервые изучаю MSP430 и пытаюсь научиться прерываниям.
Я пытаюсь следовать этим примерам 1 2 3 4. Я использую оценочную плату MSP430FR6989 и пишу код в Code Composer Studio.

Я пытаюсь включить КРАСНЫЙ СВЕТОДИОД на плате, когда нажимаю кнопку P1.1 (то есть, используя прерывание). Я могу мигать светодиодами, используя отдельный код, поэтому я знаю, что плата работает. Это код, который я пытаюсь заставить работать.

#include <msp430.h>
#include "driverlib.h"
int main(void)  //Main program

{
   WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

   P1DIR |= BIT0; // Set P1.0 to output and P1.3 to input direction
   P1OUT &= ~BIT0; // set P1.0 to Off
   P1IE |= BIT3; // P1.3 interrupt enabled
   P1IFG &= ~BIT3; // P1.3 interrupt flag cleared

   __bis_SR_register(GIE); // Enable all interrupts



   while(1) //Loop forever, we'll do our job in the interrupt routine...
   {}
}
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
    P1OUT ^= BIT0;  // Toggle P1.0
    P1IFG &= ~BIT3; // P1.3 interrupt flag cleared
}

Когда я нажимаю кнопку, светодиод не включается, и я не знаю почему.
Буду признателен за любую помощь!

Чтобы показать работающую программу LED Blink по запросу пользователя @CL

#include <msp430.h>
#include "driverlib.h"

int main(void)
{

    WDTCTL = WDTPW + WDTHOLD; // Disables the watchdog
    PM5CTL0 &= ~LOCKLPM5;     // allows output pins to be set... turning off pullups

    P1DIR = BIT0; // Make a pin an output... RED LED
    long x = 0; // Will be used to slow down blinking

    while(1) // Continuously repeat everything below
    {
     for(x=0 ; x < 30000 ; x=x+1); // Count from 0 to 30,000 for a delay
     P1OUT = BIT0; // Turn red LED light on
     for(x=0 ; x < 30000 ; x=x+1); // Count from 0 to 30,000 for a delay
     P1OUT ^= BIT0; // Turn off the red LED light
    }
}

person slow_one    schedule 12.02.2020    source источник
comment
См. пример кода для MSP430FR6989 от TI, особенно то, что он делает с LOCKLPM5. .   -  person CL.    schedule 12.02.2020
comment
Вы говорите об отключении режима высокого сопротивления при включении? добавление PM5CTL0 & = ~ LOCKLPM5; после выключения сторожевого таймера, похоже, не помогает.   -  person slow_one    schedule 12.02.2020
comment
Начните с простой программы мигания светодиодами.   -  person CL.    schedule 12.02.2020
comment
В качестве РЕДАКТИРОВАНИЯ добавлена ​​рабочая программа LED BLINK.   -  person slow_one    schedule 12.02.2020


Ответы (1)


На MSP430FR6989 LaunchPad P1.3 не подключен к кнопке. Вместо этого используйте P1.1.

Для кнопки требуется подтягивающий резистор, поэтому вы должны настроить его в P1REN и P1OUT.

Было бы неплохо настроить фронт сигнала для прерывания в P1IES.

Вы должны очистить LOCKLPM5, чтобы активировать настройки порта.

Все это можно увидеть в msp430fr69xx_p1_03.c примере программы.

person CL.    schedule 13.02.2020