各位仁兄,偶设置了四个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编辑过]
[此贴子已经被作者于2006-3-6 21:48:45编辑过]
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |