我将学习如何使用定时器和中断ARM微控制器 这是我的代码
#include "LPC17xx.h"
int flag=0;
void TIMER0_RIQHandler(void)
{
if (flag == 0 )
{
LPC_GPIO1 -> FIOSET = 1 «28; //turn on LED
flag =1;
}
else
{
LPC_GPIO1 -> FIOCLR = 1 «28; //turn off LED
flag=1;
}
LPC_TIM0 -> IR = 1 ; //clear interrupt flag
}
int main()
{
LPC_TIM0 -> CTCR = 00; //set timer mode
LPC_TIM0 -> PR = 1;
LPC_TIM0 -> MR0 = 12000000;
LPC_TIM0 -> MCR = 3 ; //IF PC REACHES PR, TC will BE
//RESET AND INTERRUPT WILL BE GENERATE
LPC_TIM0 -> TCR = 2; //RESET TIMER
NVIC_SetPriority(TIMER0_IRQn , 0 );
NVIC_EnableIRQ(TIMER0_IRQn);
LPC_TIM0 ->TCR = 1; //ENABLE TIMER
LPC_GPIO1 -> FIODIR = 1 « 28 ;
LPC_GPIO1 -> FIOCLR = 1 « 28 ;
while (1)
{
}
}
它应该每秒打开并关闭LED。 在第一个LED熄灭但中断不起作用。 我的代码出了什么问题?
答案 0 :(得分:0)
您的中断服务程序(ISR)的名称不正确。我相信应该是 TIMER0_IRQHandler 。它应与启动文件 startup_LPC17xx.s
中显示的名称匹配。由于这种不匹配,中断被触发,但是没有相应的ISR被调用。