关于niosii按键中断的问题?
代码参考了AVIC的资料,在此表示感谢!代码如下:#include "../inc/sopc.h"
#include "system.h"
#include "sys/alt_irq.h"
#include <unistd.h>
#include"altera_avalon_pio_regs.h"
#include"alt_types.h"
#include <stdio.h>
int key_flag = 0;
int i;
unsigned intstate = 1;
void ISR_key(void * context,unsigned long id)
{
KEY->EDGE_CAPTURE = 0; //清中断标志
key_flag =1;
}
void init_key(void)
{
KEY->INTERRUPT_MASK = 1; //允许中断
KEY->EDGE_CAPTURE = 0; //清中断标志
alt_irq_register(KEY_IRQ,NULL,ISR_key);
}
int main()
{
LED->DATA = 1 <<2;
init_key();
while(1){
if(key_flag){
key_flag =0;
usleep(5000);
state =(state+1)%2;
LED->DATA = state <<2;
printf("Hello led !\n");
}
}
return 0;
}
上述代码是实现在第一次按键时点亮led,第二次按键熄灭led,如此循环,但是发现按键前几次是好用的!但是按上5、6此之后就没有相应了!请各位高手给看看是什么问题? 你可以在线调试一下,看是不是每次都进中断,有可能是按键抖动问题 在线调试是每次都能进中断!但是一跑起来多按几次就不行了!
页:
[1]