wcabcd 发表于 2010-7-11 19:44:05

关于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此之后就没有相应了!请各位高手给看看是什么问题?

avic 发表于 2010-7-12 19:04:15

你可以在线调试一下,看是不是每次都进中断,有可能是按键抖动问题

wcabcd 发表于 2010-7-12 22:08:56

在线调试是每次都能进中断!但是一跑起来多按几次就不行了!
页: [1]
查看完整版本: 关于niosii按键中断的问题?