Board logo

标题: 求助:设置中断 [打印本页]

作者: fangjw    时间: 2006-3-2 11:15     标题: 求助:设置中断

各位仁兄,偶设置了四个LED和四个KEY,用EP1C6Q240C8 UP3开发板,四位KEY[3..0]分别对应48、49、57、62脚,用板上的开关SW4 、SW5、SW6、SW7,LED测试过没有问题。用下面这个简单的程序,在按钮引入中断的时候,没有相应响应。不知道为什么?急啊。不是板上有问题吧?


#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"


#include <stdio.h>
#include <unistd.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(PIO_KEY_BASE);
   IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY_BASE, 0);
   IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY_BASE, 0x0f);
}


void int_ini()
{
  void* edge_capture_ptr = (void*) &edge_capture;
  IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY_BASE, 0x0f);
  IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY_BASE, 0x00);
  alt_irq_register(PIO_KEY_IRQ, edge_capture_ptr,handle_button_interrupts);
  edge_capture = 0;
 }


int main (void) __attribute__ ((weak, alias ("alt_main")));


int alt_main (void)
{
   int_ini();
   alt_u8 led = 0x00;
   volatile int i=0;
   edge_capture=0;
   while(edge_capture==0)
   {
            led=0x0f;
            IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);
            i = 0;
            while (i<200000)
                  i++;
     
   }
   while (1)
   {
      
         led=0x00;
         IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);
         i = 0;
         while (i<200000)
                i++; 
   }


   return 0;
}


 

[此贴子已经被作者于2006-3-2 11:15:07编辑过]


作者: kzw    时间: 2006-3-2 14:34

就代码上看,是没有什么问题的。
作者: oceanx    时间: 2006-3-2 15:17

老问题了
alt_main和main的问题。。。
换成main试试看
作者: killerding    时间: 2006-3-3 00:25

问一下,什么样的中断不需要安装??

作者: kzw    时间: 2006-3-3 18:04

你所谓的安装是指什么呢
作者: killerding    时间: 2006-3-3 22:03

就是自定义router函数的中断
作者: fangjw    时间: 2006-3-6 21:48

谢谢大家这么热情帮忙,终于解决问题了。
解决途径:
1 main()与alt_main()差别:在NiosII中使用alt_main()时编译器不会加入初始化代码,也就是说系统中中断的开启,串口波涛率等的设置必须手工完成;而main()会初始化。
2 当使用main()作为程序入口时,可能存在片上存储器容量不足,可以选择相对大些的容量,并做如下一些设置:
选择此C文件的Properties 在C/C++ Build里面选择Release,尽可能不占资源选择syslib,在System Library勾选Small Library和Reduce device drivers

[此贴子已经被作者于2006-3-6 21:48:45编辑过]






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0