ARM定时器和中断

时间:2017-05-26 09:48:31

标签: timer arm interrupt keil lpc

我将学习如何使用定时器和中断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熄灭但中断不起作用。 我的代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

您的中断服务程序(ISR)的名称不正确。我相信应该是 TIMER0_IRQHandler 。它应与启动文件 startup_LPC17xx.s

中显示的名称匹配。

由于这种不匹配,中断被触发,但是没有相应的ISR被调用。