MyFPGA Forum

 找回密码
 注册
搜索
查看: 2906|回复: 0
打印 上一主题 下一主题

DE0的pio中断 真不好使, 为什么中断 进去后,出不来??

[复制链接]
跳转到指定楼层
1#
发表于 2010-7-27 00:08:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void keydowm_Init();
void BUTTON_PRESS();
void keydown(void* context,alt_u32 id);

static void keydown(void* context,alt_u32 id)  //中断处理函数
{
  
  IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTONS_BASE, 0x00);//清除边沿触发
  IRQ_flag++;
}

//BUTTON中断初始化
static void keydown_Init(void)
{
    //*edge_capture_ptr=edge_capture;
    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTONS_BASE, 0xFF);//打开中断
   IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTONS_BASE, 0x00);//清除边沿触发  
   alt_irq_register(BUTTONS_IRQ_INTERRUPT_CONTROLLER_ID,NULL,keydown);//注册中断函数
}
   
static void BUTTON_PRESS()
{
    while(1)
    {
        if(0!=IRQ_flag)
        IRQ_flag--;
        IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTONS_BASE, 0x00);//清除边沿触发
        BUTTON=IORD_ALTERA_AVALON_PIO_DATA(BUTTONS_BASE)&0xF;
        alt_busy_sleep(5000);
        BUTTON=IORD_ALTERA_AVALON_PIO_DATA(BUTTONS_BASE)&0xF;
        switch(BUTTON)
        {
            case 0x03: {
                        SURE=1;
                        IOWR_ALTERA_AVALON_PIO_DATA(LEDS_BASE,0x3FFF);//按BUTTON2
                        alt_busy_sleep(5000);
                       } break;
            case 0x05: IOWR_ALTERA_AVALON_PIO_DATA(LEDS_BASE,0x000);break;//按BUTTON1         
            default: break;
        }
         BUTTON=0xF;        
    }
}

int main()
{
    keydown_Init();
    Timer1_Init();
    BUTTON_PRESS();
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-4-28 23:21 , Processed in 0.039346 second(s), 15 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表