4324|4

8

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

nios中alt_main下的中断问题 [复制链接]

在网上看了一下alt_main使用中断需要自己注册,但我注册了程序却任进不了中断程序。
我的程序如下:(sopc builder 中设置:一个input口,边沿中断 either edge ; 一个output口)
............................
#include "system.h"

#include "alt_types.h"

#include "sys/alt_irq.h"

#include "altera_avalon_pio_regs.h"

static void keydown(void* context,alt_u32 id)//中断处理函数

{

  IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY_BASE, 0x0);

   while(1);
}
int alt_main(void)
{
   int   led=0;
   int   i;

    alt_irq_init(ALT_IRQ_BASE);//初始化中断

    alt_irq_enabled(  );//使能中断

    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY_BASE, 0x0);

    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY_BASE, 0x1);//打开中断

  alt_irq_register(PIO_KEY_IRQ,0,keydown);//注册中断函数

    while(1)
   {
      led = ~led;
      IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//led灯闪烁
      i = 0;
      while(i<200000)
           i++;
   }
}
中断使能也用过alt_irq_enable_all(PIO_KEY_BASE );
不知为什么始终进不了中断程序(led灯一直在闪烁)~~  跪求why!
此帖出自FPGA/CPLD论坛

最新回复

我不知道你有没有将那个IO口设置为 边沿 触发,你可以参看下面运行成功的中断程序: static void init_button_pio() {     void *edge_capture_ptr=(void *)&edge_capture;   /* 初始化LED_PIO为输出,KEY为输入 */   IOWR_ALTERA_AVALON_PIO_DIRECTION(INT_IN_BASE, 0);   /* 开KEY的中断 */   IOWR_ALTERA_AVALON_PIO_IRQ_MASK(INT_IN_BASE, 0x0f);   /* 清边沿捕获寄存器 */     IOWR_ALTERA_AVALON_PIO_EDGE_CAP(INT_IN_BASE, 0);    alt_irq_register(INT_IN_IRQ,edge_capture_ptr,handle_button_interrupt);    } //中断服务程序 static void handle_button_interrupt(void *context,alt_u32 id) {     volatile int *edge_capture_ptr=(volatile int*)context;     *edge_capture_ptr=IORD_ALTERA_AVALON_PIO_EDGE_CAP(INT_IN_BASE);     IOWR_ALTERA_AVALON_PIO_EDGE_CAP(INT_IN_BASE,0);     IOWR_ALTERA_AVALON_PIO_IRQ_MASK(INT_IN_BASE,0x0f);    }  详情 回复 发表于 2010-7-30 19:31
点赞 关注
 

回复
举报

8

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
:( 等高人~~
此帖出自FPGA/CPLD论坛
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
:(  没人理~
加了alt_sys_init();还是不行
此帖出自FPGA/CPLD论坛
 
 
 

回复

107

帖子

0

TA的资源

纯净的硅(高级)

4
 

回复 楼主 yokeman 的帖子

我不知道你有没有将那个IO口设置为 边沿 触发,你可以参看下面运行成功的中断程序:
static void init_button_pio()
{
    void *edge_capture_ptr=(void *)&edge_capture;
  /* 初始化LED_PIO为输出,KEY为输入 */
  IOWR_ALTERA_AVALON_PIO_DIRECTION(INT_IN_BASE, 0);
  /* 开KEY的中断 */
  IOWR_ALTERA_AVALON_PIO_IRQ_MASK(INT_IN_BASE, 0x0f);
  /* 清边沿捕获寄存器 */  
  IOWR_ALTERA_AVALON_PIO_EDGE_CAP(INT_IN_BASE, 0);
   alt_irq_register(INT_IN_IRQ,edge_capture_ptr,handle_button_interrupt);   
}
//中断服务程序
static void handle_button_interrupt(void *context,alt_u32 id)
{
    volatile int *edge_capture_ptr=(volatile int*)context;
    *edge_capture_ptr=IORD_ALTERA_AVALON_PIO_EDGE_CAP(INT_IN_BASE);
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(INT_IN_BASE,0);
    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(INT_IN_BASE,0x0f);   
}
此帖出自FPGA/CPLD论坛
个人签名快乐是一天,不快乐也是一天,为什么不天天快乐呢
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

5
 
谢谢 问题已经解决了 是编译优化的问题
此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表