Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Timer ARM定时器和中断_Timer_Arm_Interrupt_Keil_Lpc - Fatal编程技术网

Timer ARM定时器和中断

Timer ARM定时器和中断,timer,arm,interrupt,keil,lpc,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_GPIO

我将学习如何使用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熄灭,但中断不工作。
我的代码有什么问题

中断服务例程(ISR)的名称不正确。我认为应该是TIMER0\u IRQHandler。它应该与启动文件中出现的名称相匹配


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

因此,如果我错了,请纠正我,早在您达到这一点之前,您就第一次使用状态寄存器来查看计时器滚动了吗?接下来,您启用了中断,但不允许它通过cpu,而是在VNIC的外围端进行轮询,然后学习如何清除从外围到VNIC的中断(您成功轮询并切换led的每个实验)。然后,您最终允许它通过VNIC,使用正确的向量(读取文档),或者使用处理程序垃圾处理向量表,然后通过将一些向量更改为分支自身或其他位置来缩小范围?现在你到了这一步?@old_timer是的,没错。然后你完成了,它工作了……当
flag==1
TIMER0\u RIQHandler
中的
flag
会发生什么?