选择input ports only,点击next出现如下界面。
图中Generate IRQ为产生中断,即该端口具有中断的功能。Level 为中断的类型,电平中断Edge为边沿中断,选择电平中断,注意:电平中断默认是高电平有效,点击Finish。
接着再配置一个只输出的引脚来验证是否进入中断,配置方法和实验一的是相同的。接着自动分配基地址,中断优先级可手动修改。然后点击Generate生成软核。
接着在Quartus ii 中调用软核进行如下连接。
接着编译工程,并将未用到的端口设置为三态输入。设置方法见图3-1所示。分配引脚,再次编译工程,结束后将程序下载到fpga中。 打开Nios ii软件,按照实验1的步骤进行设置,打开软件以后将出现3-2所示的界面。首先编译工程,接着将在System.h中可以看见如下程序
#define INTRERR_NAME \ #define INTRERR_TYPE \ #define INTRERR_BASE 0x01001000 #define INTRERR_SPAN 16 #define INTRERR_IRQ 1
#define INTRERR_IRQ_INTERRUPT_CONTROLLER_ID 0 #define INTRERR_DO_TEST_BENCH_WIRING 0 #define INTRERR_DRIVEN_SIM_VALUE 0 #define INTRERR_HAS_TRI 0 #define INTRERR_HAS_OUT 0 #define INTRERR_HAS_IN 1 #define INTRERR_CAPTURE 0 #define INTRERR_DATA_WIDTH 1 #define INTRERR_RESET_VALUE 0 #define INTRERR_EDGE_TYPE \ #define INTRERR_IRQ_TYPE \
#define INTRERR_BIT_CLEARING_EDGE_REGISTER 0
可以看见INTRERR_IRQ 1与图4-1中所示的INTRERR的中断优先级一
样的,都为1。接下来讲解一下Nios ii的硬件中断,首先介绍一下与硬件中断相关的内容,让用户对 Nios ii 的硬件中断有一个概括性的了解。
ISR(Interrupt Service Routine)中断服务函数是为硬件中断服务的子程序。Nios ii处理器支持32 个硬件中断,每一个使能了的硬件中断都应该有一个ISR与之对应。
中断产生时,硬件中断处理器会根据检测到的有效中断级别,调用相应的 ISR为其中断服务。
要完成硬件中断工作,需要做两件事:
第一,注册中断函数ISR,它的原函数型如下所示: Int
alt_irq_register(alt_u32
id,
void*
context,
void(*handler)
(void*,alt_u32));
id:中断优先级,即所注册的ISR是为哪个中断优先级的中断服务的。中断优先级在 SOPC Builder 中分配的,如下图所示红圈标示。 中断的优先级可人为修改,0的优先级最高。