Я изучаю 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
}
}