Xilinx可编程逻辑器件设计与开发(基础篇)连载46:Spartan
12.2.4 PicoBlaze中断
我们知道,PicoBlaze微控制器只提供一个中断输入口,如果设计中需要多个中断,可以在FPGA中用逻辑实现。图12-4 所示为一个简单的中断连接图,当有中断发生时,触发器的2端输出一个高电平, 当PicoBlaze响应中断信号INTERRUPT_ACK有效时,触发器3端为高电平,其输出被清零,外部中断被撤消。
图12-4 实现简单的中断
接下来,我们结合图12-5和图12-6来讨论中断的执行过程。
图12-5 所示为一段中断程序例程,程序中首先用ENABLE INTERRUPT 指令使能中断。一旦中断使能,中断信号必须持续至少2 个时钟周期才能确保被PicoBlaze 识别。当产生中断事件时,有效的中断使PicoBlaze 在执行完毕当前正在执行的指令(INPUT s1,01)后立即跳转到3FF 处继续执行指令。通常,3FF 处是一个跳转指令(JUMP isr),跳转到中断服务程序。中断服务程序会自动禁止中断,保存当前PC值、ZERO 和CARRY 标志。当执行完毕中断服务程序,退出中断服务程序之前,执行RETURNI 指令,暂存于CALL/RETURN 堆栈中的PC 值自动装入PC 寄存器中,同时,恢复ZERO 和CARRY 标志,程序回到进入中断前的指令处执行。
图12-5 中断流程<./center>
从图12-6 中可以清楚地看到此中断的执行过程。
图12-6 中断时序图
如果应用程序不需要中断,则可以使INTERRUPT 连接到低电平,所有1024个指令空间均可以被访问到。
在应用PicoBlaze的中断时,有以下几点需要注意。
? 如果指令空间不是1K,则中断发生时,PC会跳转到程序空间的最后一条指令处执行。
? 当程序进入中断服务程序时,微控制器会自动禁止所有中断,当退出中断服务程序时,用RETURNI ENABLE指令使能中断。
? 在对时间要求很严格的设计中,需要用DISABLE INTERRUPT和ENABLE INTERRUPT配合使用,以避免不必要的中断,如图12-5所示的criTIcal_TIming子程序。
12.2.5 PicoBlaze Scratchpad RAM──暂存器
PicoBlaze微控制器包含64字节的暂存器,通过STORE和FETCH指令访问,可以在数据寄存器和暂存器之间进行数据传输。支持直接和间接寻址。暂存器仅被Spartan-3/3E/3A/3AN、Virtex-II、Virtex-II Pro FPGA和Virtex-4/5/6支持。复位不会对暂存器产生影响。
一、 寻址模式
(1) 直接寻址。
立即数就是暂存器的地址,如图12-7所示,寄存器sX直接读/写暂存器。
(2) 间接寻址。
暂存器的地址为某个指定的寄存器的值。图12-8所示代码的作用是用0填充所有64个暂存器空间。
图12-8 间接寻址暂存器
二、 用暂存器实现查找表
这个例子是用暂存器实现一个查找表,将4位2进制输入转换为等效的16进制字符显示在7段LED上。这段代码读入外部4位开关量,产生一个2进制结果0000~1111,把它转换为16进制字符显示在7段LED上。暂存器中前16个位置存放LED字符表,输入的开关量作为暂存器的地址。如图12-9所示。
图12-9 暂存器实现查找表
三、 用暂存器实现堆栈
在PicoBlaze中,虽然有CALL/RETURN程序堆栈,但是没有数据堆栈,如果在程序调用或中断处理过程中需要暂存一些数据,则需要数据堆栈,这时,可以用暂存器来实现这个功能,如图12-10所示。
图12-10 暂存器实现数据堆栈
- 可编程逻辑控制器(PLC)基本操作及功能简介(03-07)
- 基于可编程逻辑器件的数字电路设计(10-16)
- 基于CPLD的机载雷达控保系统设计与实现(10-29)
- 德州仪器可编程逻辑和自动化控制器(PLC/PAC)解决方案(11-03)
- 基于Xilinx(赛灵思) CPLD的看门狗电路设计(10-09)
- 莱迪思技术专家分享:基于FPGA的视频监控时代(02-21)