c - 中断未触发。关于为什么会这样的任何想法吗?

标签 c code-composer msp432

我正在使用 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。正如我之前所说,这种情况不会发生,因为它们所在的中断不会触发。

非常感谢任何帮助。我没有主意了。

最佳答案

您一遍又一遍地使用位掩码 0x12,对于您的注释所引用的位来说,它似乎不正确。

您有一个优秀的调试器可供您使用。单步执行代码并验证所有寄存器的值是否正确。

运行代码,按下按钮,然后暂停调试器以查看是否最终进入故障处理程序。

关于c - 中断未触发。关于为什么会这样的任何想法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55623658/

相关文章:

CC3200 SPI 从机接收不良

c - 等待用户输入值并将其分配给 var

c - FreeRTOS 应用程序堆栈可用内存随着时间的推移而减少

c - 链接时出现重复符号

c - post和pre递减c函数putchar中的char指针值的区别

c - GtkListStore 添加(段错误)

c++ - 如何使用 MSP432 DriverLib'c C 代码编写 C++ ISR?

c - 在多个端口上绑定(bind)/监听,pthreads 是正确的方法吗?

c - 尝试使用timer_A来控制LED

c - MSP432 中断与编码器计数