Nios中断参考文档.pdfVIP

  • 9
  • 0
  • 约1.55万字
  • 约 19页
  • 2020-08-21 发布于河北
  • 举报
2011-12-19 [笔记].如何使用Nios II 的中断:PIO 中断与定时器中断 引子 定时器中断,我以前在艾米电子论坛发帖讨论过;PIO 中断我在博客里也讨论过,最近发现 以前的总结有一点小错误。于是结合我最近玩触摸屏的一点点心得,写篇博文。 软硬件环境 硬件:艾米电子EP2C8 核心板+2.4’ TFT 套件 软件:Altera Quartus II 10.0 + Nios II 10.0 Software Build Tools for Eclipse 内容 1 PIO 中断 此处以ADS 的nIRQ 引脚为例。 1.1 在SOPC Builder 中例化PIO 图1.1 例化PIO 核 图1.2 Basic Setting 图1.3 Input Option 在ADS7843 中,当用触摸笔触摸到TFT 时,nIRQ 引脚会拉低,因此我们可以检测nIRQ 引脚的边沿,当为下降沿的时候,产生中断。 查看手册Embedded Peripherals IP User Guide 中的PIO 一节,阅读相关片段。根据图 1.4 和 1.5 的描述,对nIRQ 的PIO 的输 入选项的设置如图 1.3 所示。只需配置图 1.2 和图 1.3 所指的选项,其他选项缺省设置即可。 图1.4 Capture 功用 图1.5 IRQ Generation 功用 1.2 PIO 中断的C 代码 ? 1 #include system.h // 系统 2 #include altera_avalon_pio_regs.h // PIO,ads_nIRQ 3 #include sys/alt_irq.h // 中断 4 // 5 unsigned int nirq_isr_context; // 定义全局变量以储存isr_context 指针 6 void nIRQ_Initial(void); 7 void nIRQ_ISR(void* isr_context); 8 // 9 int main(void) 10 { 11 nIRQ_Initial(); // 初始化PIO 中断 12 while(1) 13 { 14 } 15 } 16 // nIRQ 中断初始化 17 void nIRQ_Initial(void) 18 { 19 // 改写timer_isr_context 指针以匹配alt_irq_register()函数原型 20 void* isr_context_ptr = (void*) nirq_isr_context; 21 IOWR_ALTERA_AVALON_PIO_IRQ_MASK(ADS_NIRQ_BASE, 1); // 使能中断 22 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(ADS_NIRQ_BASE, 1); // 清中断边沿捕获寄存器 23 // 注册ISR 24 alt_ic_isr_register( 25 ADS_NIRQ_IRQ_INTERRUPT_CONTROLLER_ID, // 中断控制器标号,从 26 system.h 复制 27 ADS_NIRQ_IRQ, // 硬件中断号,从system.h 复制 28 nIRQ_ISR, // 中断服务子函数 29 isr_context_ptr, // 指向与设备驱动实例相关的数据结构体 30 0x0); // flags,保留未用 31 } 32 // 中断服务子函数 33 void nIRQ_ISR(void* nirq_isr_context) 34 { 35 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(ADS_NIRQ_BASE, 1); // 清中断边沿捕获寄存器 36 37 // 用户中断代码 } 以第21 行为例,使能中断和清清中断边沿捕获寄存器都是按位操作的。此处nIRQ 引脚为1

文档评论(0)

1亿VIP精品文档

相关文档