【问题标题】:Cortex M-0: Simple external interruptCortex M-0:简单的外部中断
【发布时间】:2013-10-26 14:52:04
【问题描述】:

我正在尝试在我的 LPC812 uC 上设置一个外部中断。我已经制作了以下代码

#include "LPC8xx.h"

#define RLED 7  // red LED

bool pause = false;

void PININT0_IRQHandler(void)
{
  pause = !pause;
}

int main(void) {

LPC_GPIO_PORT->DIR0 |= 1<<RLED; // set pin as output

LPC_GPIO_PORT->SET0 = 1<<RLED;

NVIC_EnableIRQ(PININT0_IRQn);

while (1)
{
    if(!pause)
    {
          LPC_GPIO_PORT->CLR0 = 1<<RLED;
    }
}

}

但它不起作用。我错过了什么吗?

【问题讨论】:

  • 我没有看到将处理程序地址加载到向量表中的任何代码?
  • @MartinJames 是强制性的吗?在文件 cr_startup_lpc8xx.cpp 中有函数 void PININT0_IRQHandler(void) 的声明设置为 IntDefaultHandler 的别名。这不是说,当我像以前那样定义函数时,它就可以工作了吗?或者我真的应该将地址加载到向量表中吗?如果是这样,什么是正确的方法?
  • 你设置了pin中断时钟和GPIO时钟了吗? STARTERP0 中分配的引脚?阅读用户手册的第 8 章。
  • @Hipolith 您是否在中断处理程序中设置了断点?当您说“它不起作用”时,您必须更具体地说明正在发生的事情以及预期的行为。此外,您应该在无限循环中添加代码以在 pause = true 时打开 GPIO。

标签: embedded arm interrupt microcontroller cortex-m


【解决方案1】:

我不熟悉 NXP MCU。 但是至少要在PININT0_IRQHandler里面放置break piont,才能清楚的理解不产生中断。

清除处理程序中的中断标志也会很好。

除了 NVIC 设置之外,一些外设还需要外设寄存器中的中断权限。

你是否在某处设置了输入引脚?

您的代码仅将 GPIO 7 引脚初始化为输出。

【讨论】:

  • 欢迎来到 SO。当您要求提供更多信息时,将其作为评论会更好。
  • 感谢您的回复。我知道,我应该清除标志,但这只是为了找出如何正确设置中断。据我所知,默认输入PIN0
猜你喜欢
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多