我正在使用 Code Composer Studio v8.2.0 在 MSP432 上使用 C 语言进行编程。
现在我正在编写一个中断来使用 4 个不同的按钮来增加和减少一个变量。下面的代码删除了其中两个按钮,并且只是尝试在按下这两个按钮之一时将变量 (TEST) 增加或减少 2 的值。
我已经为一些完美工作的旋转编码器编写了一些中断。据我所知,我使用了相同的确切代码(除了明显的更改以使其用于按钮而不是编码器),但这不起作用。
按钮位于 P1.1(编辑:说 1.2)和 P1.4。此代码不会引发任何错误,但任何一个按钮都不会触发中断,因此,变量根本不会改变值。
我已经忘记了我在这一点上所做的尝试。它已经困扰我大约 5 个小时了。
#include "msp.h"
#include "driverlib.h"
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "grlib.h"
#include "button.h"
#include "imageButton.h"
#include "radioButton.h"
#include "checkbox.h"
#include <LcdDriver/kitronix320x240x16_ssd2119_spi.h>
#include "images/images.h"
int TEST = 0;
int main(void)
{
WDT_A->CTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD; // stop watchdog timer
boardInit();
clockInit();
initializeOptionsMenuButtons();
__enable_interrupt();
//Navigation Testing IO
__disable_irq();
P1->SEL1 &= ~0x12; // select io function: P1.2 & P1.4
P1->SEL0 &= ~0x12;
P1->DIR &= ~0x12; // set inputs
P1->REN |= 0x12; // enable pull resistors for P1.2 & P1.4
P1->OUT &= ~0x12; // need to set P2.3-P2.6 to low so PULLDOWN resistor will be selected
P1->IES &= ~0x12; // select low to high transition for interrupt
P1->IFG = 0; // clear interrupt register
P1->IE |= 0x12; // enable interrupt for P1.2 & P1.4
NVIC_SetPriority(PORT1_IRQn,3);
NVIC_EnableIRQ(PORT1_IRQn);
__enable_irq();
for(;;){
}
}
void PORT1_IRQHandler(void) {
if( P1->IFG & 0x02 ) { // UP (2.3) triggers interrupt
if ( 2 <= TEST <= 11 ) {
TEST = TEST - 2;
}
}
if( P1->IFG & 0x10 ) { // DOWN (2.4) triggers interrupt
if ( TEST <= 9 ) {
TEST = TEST + 2;
}
}
P1->IFG &= ~0x12;
}
根据按下哪个按钮,名为 TEST 的变量应该递增或递减 2。正如我之前所说,这不会发生,因为我将它们包含在其中的中断不会触发。
任何帮助是极大的赞赏。我没主意了。