免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 8515 | 回复: 23
打印 上一主题 下一主题

中断异常的问题,在飞思卡尔的mpc8313开发板上调程序,核是E300Core [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-05 11:37 |只看该作者 |倒序浏览
大家好,我想问个powerpc的问题~我现在飞思卡尔的mpc8313开发板上调程序,核是E300Core~小弟我现在在加中断处理程序,看手册,不太清楚Instruction Address Breakpoint Interrupt (0x01300),这个中断是做什么的?~手册上是怎样写的:The interrupt is taken when an instruction breakpoint address matches on the next instruction to complete. The instruction tagged with the match is not completed before the instruction address breakpoint interrupt is taken。与之有关的两个寄存器Instruction Address Breakpoint Registers (IABR and IABR2),我不太清楚这个中断的原因,和相应的寄存器是做什么用的?~谢谢

论坛徽章:
0
2 [报告]
发表于 2009-08-05 19:30 |只看该作者
e300 core的没怎么用过,以前只简单接触过8360,大概差不多吧。这个中断的原因是,你设置了某个相关的寄存器之后,如果马上要执行的指令地址是这一寄存器的值,就触发这一中断,并且引起中断的指令不会被执行到。
问题是你要处理这个中断干啥?这个是用于调试功能支持的,设置硬件断点。除非特别有必要一般不太会针对这个写。不知道你用的是什么系统?我们以前只在系统不支持这些功能时自己做过(如VxWorks5.x不支持8270的硬件断点)。
在PowerPC系列的Core上只有一个真正的外部中断(多数是0x500,External Interrupt;记不清楚e300有没有区别了),通常自己的设备是通过中断控制器挂在它上面的,并且总中断的处理往往系统会提供,通过中断控制器相关的寄存器再明确是什么中断,只需要把自己要处理的中断挂进来就可以了。

论坛徽章:
0
3 [报告]
发表于 2009-08-06 10:07 |只看该作者
对,兄台,E300核和8360差别不大,我知道E300内核大概中断和异常是: Machine Check机器自检异常,External Interrupt,外部中断,这个就是你所说的外部中断,TLB MISS异常,ISI异常,DTLB MISS异常。DSI异常等等,我现在想做的是,相当于不用操作系统,在boot起来之后,我自己对每个异常和中断加异常和中断处理程序,当异常发生时,进入这些处理程序处理~
我看了下手册,E300大概有18个异常类型,所以我得大概知道每种异常机制是什么,异常处理程序然后做一些处理.
System reset
Machine check
DSI
ISI
External
Alignment
Program
Floating-point
unavailable
Decrementer
Critical Interrup
System call
Trace
ITLB miss
DTLB miss on load
DTLB miss on store
Instruction address breakpoint
System management interrupt
兄台意思是,若我自己加异常处理的话,对上面的所有异常,不用对每个异常都加上异常处理程序,除非是要用到某个功能,比如说是Trace,Instruction address breakpoint等,我不知道VxWorks,或linux是不是对所有的异常都有相应的处理程序的~?

论坛徽章:
0
4 [报告]
发表于 2009-08-06 12:30 |只看该作者

回复 #3 bitliu1983 的帖子

8360用的就是E300 Core,呵呵。实际上Book-E系列的E500比较特别,和原来的区别很大,而E300应该是后出,反而又回归了原来的一些,用E500的8560等有点象是一个试着做64位的过渡产品,但感觉不太成功。据当时评估的同事说8360主要是在CPM上做了许多优化和新功能,不过后来我离开电信行业之后没再用过PowerPC的芯片,所以现状不太了解。

这些中断和异常如果不写操作系统,你自己必须提供,最简单的是一个中断返回指令,但向量表不能为空。至少哪些可以是空返回哪些要操作,要仔细分析你的CPU使用时的情况和中断本身的产生条件。例如ISI、DSI、Program如果你都填写为空的,那一旦出现读了非法地址(不存在),先产生一个DSI,而向量表中没有指令,则会继续触发Program异常,但此时也读不到合法指令,则CPU继续产生Program,最终结果是什么取决于你有没有做硬件狗。
可以不用很完善,但通常是要处理的,有些异常如你说的这个硬件断点,如果你确信使用中不会遇到(不设置相关寄存器),一般来说问题倒不大;但对于基本的、很容易由程序错误引起的ISI、DSI、Program等应该加上一定的处理。

论坛徽章:
0
5 [报告]
发表于 2009-08-06 13:33 |只看该作者
嗯,明白了,看来仁兄在powerpc上搞过些东东的啊,比较了解。我在工业控制行业~搞powerpc的感觉没有ARM普遍呀,我以前搞ARM~,ARM异常机制和类型也比powerpc简单~
包括ISI、DSI、Program等这些异常,我在异常处理程序里,会做一些操作,保存到SRR0和SRR1寄存器,这个是处理器自己做的,我就比如把当前任务或应用程序的处理器上下文保存到相应栈里,然后异常处理完毕之后,用rfi指令返回。
我之所以想把所有的异常产生原因和类型搞明白,是因为,对应不同的异常,异常处理程序,可能要保存当前的异常环境和产生异常的原因,就要访问依赖于某个异常的寄存器,比如说,产生DSI异常,引起数据存储异常的原因和异常信息可以从DSISR.和DAR寄存器获取到。所以之前贴子里的有些异常,我不太清楚具体的产生原因,有些还和mmu有关系~~ Performance Monitor Interrupt,感觉是和性能监控有关系的异常中断?Program异常指的就是一些非法指令和未定义指令或浮点运算产生的异常~还想请假兄台,Single-Step Instruction Trace Mode,也就是TRACE,这个也是用来debug和调试用的吧?

论坛徽章:
0
6 [报告]
发表于 2009-08-06 14:53 |只看该作者
PowerPC是我用的最久的CPU,所以比较熟悉一些。它的资料还是比较全的,以前都可以申请免费的纸件书,现在不知道有没有和Intel一样取消。在嵌入式行业PPC算是偏高端一些了,通信行业用的蛮多的。
自己做要注意刚开始时不能使用任何r0~r31及其它的寄存器,而要先利用PPC特殊提供给操作系统用的几个寄存器把它周转开,然后再寄存器都保存了,才能使用自己的其它处理程序。
Performance Monitor Interrupt没用过,也懒得去查手册了,看名称应该是用于性能统计的。现在挺多CPU都带一些性能统计功能,无外乎是中断+控制寄存器方式吧。Single-Step Instruction Trace Mode也是用于调试的。

论坛徽章:
0
7 [报告]
发表于 2009-08-07 09:35 |只看该作者
你是指的是通用寄存器(GPR)。GPR1~GPR31吗,powerpc有两种模式,一种是用户模式。一种是超级用户模式,我想在boot起来之后,若在超级用户模式下,可以对用户寄存器和系统寄存器进行操作的吧?兄台所说的周转开是指的什么?~
当然在bootloader里需要把IMMR配置好是吧~我想bootloader也自己写,参考uboot,以前在arm底下,我们是用intel的ixp425,然后boot也是参考uboot的,但感觉powerpc的boot好像在boot阶段就把MMU配置好,我想问兄台,powerpc的mmu应该和arm差不多吧,即使有mmu,也可以按实地址和虚拟地址是一一对应的,平坦的地址,然后用页表属性设置页面的读写权限,这样可以做存储权限保护。powerpc的mmu我还没开始看,现在在研究中断和异常,还有mpc8313的IPIC。我刚研究powerpc不到2个月,呵呵,想和你多多交流~

论坛徽章:
0
8 [报告]
发表于 2009-08-07 13:06 |只看该作者
不一定是通用寄存器。产生中断/异常的时候,CPU只设置了几个特殊的寄存器(如SRR0、SRR1等),其它寄存器都还是当前的进程或低级别中断的上下文,这时多数寄存器是不能使用的,否则会导致返回时无法恢复。但PowerPC有一个特点是只有GPR才能用于load/store指令,特殊寄存器的值只有先move到某个GPR才能写入内存保存;也许可以直接调整栈然后保存通用寄存器,但不是任何时候都可行,所以通常是利用PowerPC专门提供的SPRGx中的某一个来周转一下GPR。出现异常的时候CPU是自动切换到Super Mode的。这些SPRG不同的PPC有所不同,你用的E300 Core应该是共有7个。关于这一部分你可以看一下VxWorks中的处理。

ARM我没有用过,所以不太好比较。PowerPC的MMU和x86差异比较大,而它系列中的E500又比较特别。除了E500,原来的我都没怎么搞明白,主要是原来也不怎么用,基本上只用它的段式映射把虚拟地址和实地址映射为相同的,但这个并非是必须的,可以做成和普通Linux那样的方式。在PowerPC中段式映射和页式映射是共存的,并且可以并行搜索,应该是优先段式映射的。它的页面映射是用Hash做的,并且第一次Hash不中再Hash一次,实在是没搞清楚。

论坛徽章:
0
9 [报告]
发表于 2009-08-07 14:12 |只看该作者
嗯,明白了~在研究手册,有点感觉了,SPRGx用来异常处理程序里,快速保存当前处理器的状态或用在多处理器结构上~~还想和兄台探讨的是,E300的内核的异常有几种,其中有两种类别,你看我理解对不,precise exception,另一者imprecise exception。precise exception指的是某一指令(触发exception的指令)仍在处理器pipeline执行的过程,即发出change control flow的event,并且进入exception handler。imprecise exception指的是某一指令(会触发exception的指令)在处理器pileline完后,才发出change control flow的event,然后才进入exception handler中执行。可能这个是理论。我不知道这两个异常对于我来说,有什么区别,这两个异常是怎么区分的?异常处理程序怎么考虑处理,还是说我知道是不同的异常,但可以理解成对我透明,这是CPU内部的处理~~

论坛徽章:
0
10 [报告]
发表于 2009-08-07 18:01 |只看该作者
precise exception是指产生异常时可以精确地知道是哪条指令产生的,而imprecise exception是指产生异常时触发异常的条件往往和当前正在执行的指令无关。

SPRGx并不是只用于异常处理的,这个完全取决于不同系统的数据。如果自己做就自己看着办去用它了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP