原创 NIOS II学习二~~按键中断

2010-4-25 09:47 3947 11 11 分类: FPGA/CPLD

关于按键中断的程序  解释得很详细


记得在用SOPC BUILDER添加PIO时要把IO设成输入的  而且要选定是什么沿触发



主要是检测BUTTON下降沿,触发中断,点亮相应的LED。

#include <stdio.h>
#include <io.h>
#include <system.h>


/*********************************************
函数名:button_irq
功  能:button中断处理函数
输  入:context:相关内容指针,中断号
返  回:
备  注:读取相应BUTTON数据,点亮相应LED
**********************************************/
void button_irq(void *context,alt_u32 interrupt)
{
  unsigned int data;
  //*在下面的语句中0x00代表是数据寄存器  0x01代表是方向寄存器  0x02代表是中断掩码器  0x03代表是边沿捕获寄存器*/
  /* 读取边沿捕获寄存器值 */
  data="IORD"(BUTTON_BASE,0x03);//这里的0x03代表地址偏移量为3  当偏移量为0时代表边沿捕获寄存器  



  /* 点亮相应的LED */
  IOWR(LED_BASE,0x00,data);  //这里的0x00代表地址偏移量为0  当偏移量为0时代表数据寄存器



  /* 清除边沿捕获寄存器 */
  IOWR(BUTTON_BASE,0x03,0x00);
}


#include <stdio.h>


int main()
{
  unsigned int data;
 
  printf("BUTTON 中断实验!\n");
 
  /* 开放低四位 BUTTON的中断屏蔽 */
  IOWR(BUTTON_BASE,0x02,0x0f);
 
  /* 清除边沿捕获寄存器,先清除寄存器的内容*/
  IOWR(BUTTON_BASE,0x03,0x00);
 
  /* 注册中断处理函数 */
  if (alt_irq_register( BUTTON_IRQ, NULL,button_irq))
  {
    printf("alt_irq_register error\n");   //在system liarbry里面的stdin stdout都设置为jtag uart,则alt_irq_register error在console窗口会显示出来
    return -1;
  }
 
  while(1);  //等待中断
 
  return 0;
}



 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
11
关闭 站长推荐上一条 /3 下一条