首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

关于按键中断,有疑问,请进来帮帮忙,谢谢

关于按键中断,有疑问,请进来帮帮忙,谢谢

我想在我的程序中添加一个简单的按键中断,实现功能为:f1建按下时在数码管上显‘9’,

f2建按下时显‘6’。f1,f2分别接到了由于产生中断的pio的0和1位上。

程序如下:

#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include "sys/alt_irq.h"

volatile int edge_capture; 
 ..   
   static void handle_button_interrupts(void* context, alt_u32 id){
  volatile int* edge_capture_ptr=(volatile int*)context;
  *edge_capture_ptr=IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_1_BASE);
  IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_1_BASE,0);  
}

static void init_button_pio_1(){
  void* edge_capture_ptr=(void*)&edge_capture;
  IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_1_BASE,0x1);
  IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_1_BASE,0x0);
  alt_irq_register(BUTTON_PIO_1_IRQ,edge_capture_ptr,handle_button_interrupts);
}
static void handle_button_press(){
    switch(edge_capture)
    {case 0x1:
       IOWR_ALTERA_AVALON_PIO_DATA(SHUMAGUAN_PIO_BASE,0x9);
        break;
     case 0x2:  
       IOWR_ALTERA_AVALON_PIO_DATA(SHUMAGUAN_PIO_BASE,0x6);
        break;
    }  
}
 
int  main (void)
{  

。。

。。

init_button_pio_1();

while (1)  {。。

。。

if(edge_capture!=0)
    {
      handle_button_press();
    } 
     }  

  return 0;
}

现在的问题是:当f1键按下时数码管能 显示‘9’但f2按下后毫无反应,请各位高手帮忙分析一下是什么原因??

谢谢!!

 

[em06]

[此贴子已经被作者于2007-5-24 11:37:42编辑过]

你既然是两个PIO,为什么写MASK只写1啊,这个明显错了啊。
在交流中前进,共同实现nios的应用。

[em04]

多谢版主提醒,刚开始学。。。。改成0x3就对了。

[em04]

不用,开始慢慢来。
在交流中前进,共同实现nios的应用。
返回列表