Nios II中断简述及中断调试技巧.doc_第1页
Nios II中断简述及中断调试技巧.doc_第2页
Nios II中断简述及中断调试技巧.doc_第3页
Nios II中断简述及中断调试技巧.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Nios II中断简述及中断调试技巧一、Nios II中断简述 Nios II 的中断处理方式带有典型的RISC处理器的特征,所有的中断处理都从同一入口进入,然后由软件加以分配。负责分配工作的软件叫系统ISR,它是由开发系统提供的,自动的连接到可执行程序上。系统ISR维护着一个中断向量表,表中的每一项代表着一个专项处理程序的入口。所有的专项处理程序都是由用户定义然后注册到中断向量表中的,叫做用户ISR。系统ISR的入口地址是在SOPC_Builder中定义的,叫Exception Address。和中断有关的CPU寄存器有:ctl0、ctl1、ctl3、ctl4。Ctl0 是程序状态字,它的bit0位是全局中断允许位,1代表允许,0代表禁止。Ctl1是程序状字的堆栈,当发生中断时,由它保留一个程序状态字的备份。 Ctl3是中断允许寄存器,其中每一位控制着一个中断源,1代表允许,0代表禁止,共计32位。Ctl4是中断申请寄存器,每一位对应着一个中断源的中断请求,1代表有中断,0代表没有计32位。NiosII的中断处理过程是这样的:1. 拷贝一份程序状态字到ctl1;2. 清除全局中断允许位PIE,禁止中断;3. 将下一条将执行的指令的地址存入R29,以便中断返回之用;4. 跳转到中断入口地址,进入系统ISR;5. 系统ISR保护现场;6. 系统ISR检测ctl1的PIE位,如为0则进入软中断处理程序从11继续,否则由7继续;7. 系统ISR检测Ctl4,如果有中断申请,则转到硬中断处理和序,否则进入软中断处理程序;8. 硬中断处理程序将检测中断申请号,并检索中断向量表,跳转到用户中断处理程序;9. 用户中断处理程序做出具体的处理,最后返回系统ISR;10. 系统ISR恢复现场,并返回;11. 软中断处理程序进行陷井指令、模拟指令判断,并做相应处理,然后返回系统ISR;12. 系统ISR恢复现场并返回;软中断处理程序是用来处理由软件发起的中断事件的,包括调试指令引起的中断及未定义指令引起的中断。目前未定义指令的处理主要为乘、除法运算指令的处理,不支持用自定义的操作码,除用户自己修改系统程序。如果软中断处理程序遇到了一个不识别的操作码,将返回一个不确定的结果。与用户编程相关API函数有:1、 alt_irq_register();alt_irq_register()是向系统ISR注册用户ISR的API函数。其原形为: int alt_irq_register( alt_u32 id,void *context,void (* isr)(void *, alt_u32) id 代表被服务的中断向量号; context 是运行参数指针,将来作为第一个参数传给用户ISR; Isr 是一个函数指针,指向用户ISR入口;如果注册成功,函数返回0,并允许全局中断及被服务中断;不成功返回非0值。2、 alt_irq_disable();Alt_irq_disable()用来禁止某个中断服务。原形为: Int alt_irq_disable(alt_u32 id) Id 为对应的中断号; 返回值为0;3、 alt_irq_enble();alt_irq_enable()与alt_irq_disable()对应,用来开启某个中断服务。原形为: int alt_irq_enable(alt_u32 id)4、 alt_irq_disable_all();alt_irq_disable_all()用于关闭全局中断,原形为: alt_irq_context alt_irq_disable_all(void) 返回值为中断控制寄存器的值。5、 alt_irq_enable_all();Alt_irq_enable_all()用于开启全局中断,原形为: void alt_irq_enable_all( alt_irq_context context) context 代表中断控制寄存器的值。用户定义的用户ISR程序要符合统一的原形定义,即: void isr(void * context, alt_u32 id)函数名没特别的要求,与一般函数一样。入口参数与返回值要严格按标准形式定义,否则系统ISR将不能正确的对其调用。二、中断调试技巧 中断由3个寄存器控制status、ienable、ipending,status寄存器的最低位为PIE,表示中断使能位,PIE位为0时,禁止外部中断;PIE位为1时,允许外部中断,但中断是否有效还取决与ienable寄存器的值。ienable寄存器为32位,它的每一个位对应一个外部中断源的使能位。若第n位为1,表示相应输入信号irqn可以发起中断请求,若为0,则表示外部中断被禁止。ipending寄存器表示处理器正在处理的中断,若第n位为1,则表示相应输入的irqn有效。一般你的中断不正常的时候,你首先检查这几个寄存器,确定总中断控制位打开了,ienable对应位打开了,ipending寄存器可以确定哪个中断发生了。还有一个非常重要的数组,也就是中断向量表,你们观察一下全局变量alt_irq,在调试模式下,把alt_irq找出来观察。DMA中断优先级设的是2,把alt_irq2再展开这个信息很重要, alt_irq就是中断向量表,有32个元素,每个对应一个中断优先级,中断注册成功的话,就会往中断向量表写入ISR和context,里的是中断函数,就像

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论