| 网站首页 | 新闻 | SOPC | FPGA | DSP | ARM | 嵌入式操作系统 | 下载 | 网上商城 | 芯片价格参考 | 留言 | 论坛 | 网络协议 | 驱动设计 | 购买指南-HowtoBuy | 
您现在的位置: FPGA开发板 FPGA 开发板 SOPC开发板 DSP开发板 视频开发板 -嵌入式控制研究室 >> SOPC >> Nios >> 文章正文 用户登录 新用户注册
nios ii的 中断         ★★★ 【字体:
nios ii的 中断
作者:佚名    文章来源:互联网    点击数:    更新时间:2006-7-10
PIO控制器相应的interruptmask必须处理:Setting a bit in the interruptmask register to 1 enables interrupts for
the corresponding PIO input port. Interrupt behavior depends on the
hardware configuration of the PIO core。

几点重要的:
1. 中断io的方向
2. 中断功能的enable
3. 写一个 中断响应函数EXT_INT8_IRQ_ISR
4. 调用alt_irq_register()注册 中断响应函数EXT_INT8_IRQ_ISR

相关文档
..\altera\kits\nios2_51\documents\n2sw_nii5v2.pdf //软件
..\altera\kits\nios2_51\documents\n2sw_nii5v3.pdf //硬件

#include <stdio.h>
#include <string.h>
#include "io.h"
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include "sys/alt_irq.h"


volatile alt_irq_context g_context;


void test_Led(alt_u32 dwDelay);
void Init_Ext_interrupt();

//C:\altera\kits\nios2_51\documents\n2sw_nii5v2.pdf
static void EXT_INT8_IRQ_ISR(void * context,alt_u32 id)
{
volatile int* g_context_ptr = (volatile int*) context;

IOWR_ALTERA_AVALON_PIO_IRQ_MASK(EXT_INT8_BASE, 0x0);
printf("disable interrupt\n");

*g_context_ptr = IORD_ALTERA_AVALON_PIO_EDGE_CAP(EXT_INT8_BASE);
printf("edge capture register in *context.=%x\n",*g_context_ptr);
switch (*g_context_ptr)
{
case 0x10:
printf("button1 is pressed\n");
break;
case 0x20:
printf("button2 is pressed\n");
break;

default:
break;
}


IOWR_ALTERA_AVALON_PIO_EDGE_CAP(EXT_INT8_BASE, 0);
printf("Reset edge capture register\n");

IOWR_ALTERA_AVALON_PIO_IRQ_MASK(EXT_INT8_BASE,0x30);//set two button to 0 ensable interrupts
//test_Led(500000);
}


int main()
{
alt_u8 led = 0x2;
alt_u8 loop = 5;
volatile int i;
printf("alt_main() \n");
while(loop--)
{
printf("while(loop=%d) \n" , loop);
test_Led(500000);
}
Init_Ext_interrupt();


while (1)
{
printf("while (1)\n");
test_Led(5000000);
}

return 0;
}

void test_Led(alt_u32 dwDelay)
{
unsigned char led=0x05;
unsigned long i = 8;

usleep(dwDelay);
IOWR(LED_BASE,1,0xFF);
IOWR(LED_BASE,0,led);

//printf("test_Led() \n");//
usleep(dwDelay);
led =~led;
IOWR(LED_BASE,0,led);

}

void Init_Ext_interrupt()
{
printf("Init_Ext_interrupt() Enter\n");
//-- Reset the edge capture register.
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(EXT_INT8_IRQ, 0x0);

//-- Set derection as input
IOWR_ALTERA_AVALON_PIO_DIRECTION(EXT_INT8_BASE,0x00);//input

//-- enable bit5 and bit4 to implement interrupt
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(EXT_INT8_BASE,0x30);//set two button to 0 ensable interrupts

//-- register irq_function
alt_irq_register(EXT_INT8_IRQ,(void*)&g_context,EXT_INT8_IRQ_ISR); //--------
printf("Init_Ext_interrupt() Exit\n");
}


//-------------------------------------------------------------------------------
//-- Result
//-------------------------------------------------------------------------------

nios2-terminal: connected to hardware target using JTAG UART on cable
nios2-terminal: "ByteBlasterII [LPT1]", device 1, instance 0

nios2-terminal: Warning: The JTAG cable you are using is not supported for Nios
nios2-terminal: II systems. You may experience intermittent JTAG communication
nios2-terminal: failures with this cable. Please use a USB Blaster revision B
nios2-terminal: cable or another supported cable. Please refer to the file
nios2-terminal: errata.txt included in the Nios II development kit documents
nios2-terminal: directory for more information.

nios2-terminal: (Use the IDE stop button or Ctrl-C to terminate)

alt_main()
while(loop=4)
while(loop=3)
while(loop=2)
while(loop=1)
while(loop=0)
Init_Ext_interrupt() Enter
Init_Ext_interrupt() Exit
while (1)
disable interrupt
edge capture register in *context.=2f
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
while (1)
disable interrupt
edge capture register in *context.=10
button1 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=10
button1 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=10
button1 is pressed
Reset edge capture register
while (1)
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=10
button1 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=10
button1 is pressed
Reset edge capture register
while (1)
disable interrupt
edge capture register in *context.=10
button1 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=10
button1 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
while (1)
disable interrupt
edge capture register in *context.=10
button1 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=10
button1 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
while (1)
disable interrupt
edge capture register in *context.=10
button1 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=10
button1 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
while (1)
disable interrupt
edge capture register in *context.=10
button1 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=10
button1 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=10
button1 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=10
button1 is pressed
Reset edge capture register
while (1)
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
disable interrupt
edge capture register in *context.=20
button2 is pressed
Reset edge capture register
while (1)
while (1)
while (1)
文章录入:fengfeiyi    责任编辑:fengfeiyi 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    SOPC技术在电力机车改造中的…
    基于SOPC技术的核信息远程采…
    把SOPC Builder用于非Nios系…
    SOPC自定义模块的添加和接口…
    NiosII开发常见问题
    应用SoPC Builder开发电子系…
    niosII初学者无痛起步
    nios flash read/write
    sopc Flash Programmer,nios…
    基于μClinux的SoPC应用系统…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)