关于nios 中的中断,因为要16c550中需要nios的中断环境去测试,所以就用到了中断。
硬件:在nios中添加硬件PIO,但是要使能中断功能。如下图所示:
系统列化,PIO的连接就不说了。但是要注意两地方:edge type, IRQ type。
接下来就是软件设计:
使能相应的中断,IOWR_ALTERA_AVALON_PIO_IRQ_MASK(INTREP_BASE, 0xff);即相对应的MASK函数每一位1位使能。
清中断标志位:IOWR_ALTERA_AVALON_PIO_EDGE_CAP(INTREP_BASE, 0x00);
中断注册函数:
alt_ic_isr_register(INTREP_IRQ_INTERRUPT_CONTROLLER_ID, //定义在system.h中
INTREP_IRQ,
//定义在system.h中
intrp_isr, //中断服务子函数
isr_context, //空指针
void * isr_context
0x0 //保留位,但是要写
);
对应中断服务子函数:
void intrp_isr(void)
{
printf("have enter
the isr \n");
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(INTREP_BASE,
0x00) ; //清标志位
。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。
}
到此软硬件,设计完毕。只要对应的PIO,发生中断的条件,在nios 中就会响应中断,进入中断服务子函数。