|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2010-7-17 15:54:55
|
显示全部楼层
新问题出现了:
这是我的按键的程序,也是没有使用API,按照”那些事“的套路写的:
#include "system.h"
#include <unistd.h>
#include <stdio.h>
#include "sys/alt_irq.h"
#include "altera_avalon_pio_regs.h"
#define uint unsigned int
#define uchar unsigned char
/*结构体的定义*/
typedef struct
{
unsigned long int DATA;
unsigned long int DIRECTION;
unsigned long int INTERRUPT_MASK;
unsigned long int EDGE_CAPTURE;
} PIO_STR;
/*绿灯的定义*/
#define LED_GREEN ((PIO_STR *)LED_GREEN_BASE)
/*红灯的定义*/
#define LED_RED ((PIO_STR *)LED_RED_BASE)
/*按键的定义*/
#define KEY ((PIO_STR *)BUTTON_PIO_BASE)
int key_flag=0;
void isr_key(void *context,unsigned long int id)
{
key_flag=~key_flag;
}
int init_interrupt()
{
KEY->INTERRUPT_MASK=1;
//EDGE_CAPTUREKEY->EDGE_CAPTURE=FALLING;
return alt_irq_register(BUTTON_PIO_IRQ,NULL,isr_key);
}
int main()
{
if(!init_interrupt())
{
printf("successful!");
}
else
{
printf("error!");
}
while(1)
{
if(key_flag)
{
LED_GREEN->DATA=1<<0;
}
else
{
LED_GREEN->DATA=1<<7;
}
}
}
中断注册成功了,但是不管按不按键都是执行LED_GREEN->DATA=1<<7,即最高位的那个灯亮。
需要说明的是,我配置的按键管脚的时候用的是下降沿中断,在这里是不是要多加几句话? |
|