【发布时间】: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