MSP430: Попытка запоминания прерываний с помощью мигания кнопок и светодиодов - PullRequest
0 голосов
/ 12 февраля 2020

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

Я пытаюсь переключить REDLED на плате, когда нажимаю sh кнопку P1.1 (ie, используя прерывание). Я могу мигать светодиодами, используя отдельный код, поэтому я знаю, что плата работает. Это код, который я пытаюсь заставить работать.

#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
    }
}

1 Ответ

0 голосов
/ 13 февраля 2020

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

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

Возможно, было бы неплохо настроить край сигнала для прерывание в P1IES.

Для активации настроек порта необходимо очистить LOCKLPM5.

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

...