Timer ARM定时器和中断
我将学习如何使用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
#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
会发生什么?