Nios II 中断简述及中断调试技巧 Nios II 中断处理方式带有典型的 RISC 处理器的特征,所有的中断处理都从同一入口进入,然后由软件加以分配。负责分配工作的软件叫系统 ISR,它是由开发系统提供的,自动的连接到可执行程序上。 Nios II 中断处理过程: 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 恢复现场并返回。 中断相关寄存器: * CTL0:程序状态字,它的 bit0 位是全局中断允许位,1 代表允许,0 代表禁止。 * CTL1:程序状字的堆栈,当发生中断时,由它保留一个程序状态字的备份。 * CTL3:中断允许寄存器,其中每一位控制着一个中断源,1 代表允许,0 代表禁止,共计 32 位。 * CTL4:中断申请寄存器,每一位对应着一个中断源的中断请求,1 代表有中断,0 代表没有,共计 32 位。 中断调试技巧: * 使用 status、ienable、ipending 三个寄存器控制中断,status 寄存器的最低位为 PIE,表示中断使能位,PIE 位为 0 时,禁止外部中断;PIE 位为 1 时,允许外部中断,但中断是否有效还取决与 ienable 寄存器的值。 * ienable 寄存器为 32 位,它的每一个位对应一个外部中断源的使能位。若第 n 位为 1,表示相应输入信号 irqn 可以发起中断请求,若为 0,则表示外部中断被禁止。 * ipending 寄存器表示处理器正在处理的中断,若第 n 位为 1,则表示相应输入的 irqn 有效。 与用户编程相关 API 函数: * alt_irq_register():向系统 ISR 注册用户 ISR 的 API 函数。 * alt_irq_disable():禁止某个中断服务。 * alt_irq_enable():开启某个中断服务。 * alt_irq_disable_all():关闭全局中断。 * alt_irq_enable_all():开启全局中断。 用户定义的用户 ISR 程序要符合统一的原形定义,即:void isr(void *context, alt_u32 id) 函数名没特别的要求,与一般函数一样。入口参数与返回值要严格按标准形式定义,否则系统 ISR 将不能正确的对其调用。
- 粉丝: 5
- 资源: 931
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助