首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
FPGA/CPLD可编程逻辑
» 《Xilinx可编程逻辑器件设计与开发(基础篇)》连载46:Spartan-6的PicoBlaze 中断
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
《Xilinx可编程逻辑器件设计与开发(基础篇)》连载46:Spartan-6的PicoBlaze 中断
发短消息
加为好友
pengpengpang
(pengpengpang)
当前离线
UID
1023229
帖子
6106
精华
0
积分
3055
阅读权限
90
来自
中国
在线时间
156 小时
注册时间
2013-12-20
最后登录
2016-7-3
论坛元老
UID
1023229
来自
中国
1
#
打印
字体大小:
t
T
pengpengpang
发表于 2014-10-23 20:35
|
只看该作者
《Xilinx可编程逻辑器件设计与开发(基础篇)》连载46:Spartan-6的PicoBlaze 中断
开发
,
连载
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直接读/写暂存器。
图12-7 直接寻址暂存器
(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 暂存器实现数据堆栈
收藏
分享
评分
记录学习中的点点滴滴,让每一天过的更加有意义!
回复
引用
订阅
TOP
返回列表
测试测量
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议