|
代码参考了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 int state = 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此之后就没有相应了!请各位高手给看看是什么问题? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|