搜索
bottom↓
回复: 8

s3c2440中断后pc指针被强制指向何处

[复制链接]

出0入0汤圆

发表于 2012-12-3 15:47:44 | 显示全部楼层 |阅读模式
如题,当发生中断时,如果没有初始化mmu的话,程序PC指针会被强制批向何处?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-12-3 15:59:55 | 显示全部楼层
2440是ARM920T内核,无论是否初始化MMU,出现中断后,ARM Core都会在固定的地址执行中断向量。
地址有两个,一个是0x0000_0000,IRQ的话有对应的偏移;如果在CP15配置了高地址,好像地址是0xFFFF_0000的。
开了MMU只是数据从哪个物理地址提取了。

出0入0汤圆

 楼主| 发表于 2012-12-3 16:16:47 | 显示全部楼层
dr2001 发表于 2012-12-3 15:59
2440是ARM920T内核,无论是否初始化MMU,出现中断后,ARM Core都会在固定的地址执行中断向量。
地址有两个 ...

你好,非常感谢能回答我的问题!
我现在最不理解的就是当从nand flash启动后,发生中断时程序跳到了0x0去执行,这个0x0在已经初始化了MMU和未初始化MMU的情况下是不一样的,一个是在内部的sram,另一个是在外部的sdram。现在问题是,开了MMU的话,能正常中断,不开MMU的话,程序就跑飞了,我找了几天了,始终找不到原因

出0入0汤圆

发表于 2012-12-3 16:32:06 | 显示全部楼层
不开MMU自己把向量复制过去就行,如果对应地址没有存储器,就必须开MMU,这个没办法。
特别注意,向量用LDR PC这样的指令格式,普通跳转有地址范围限制。

出0入0汤圆

 楼主| 发表于 2012-12-3 16:35:44 | 显示全部楼层
dr2001 发表于 2012-12-3 16:32
不开MMU自己把向量复制过去就行,如果对应地址没有存储器,就必须开MMU,这个没办法。
特别注意,向量用LDR ...

我就是这么弄的,是用的ldr pc, =HandlerIRQ,就是不行

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-12-3 17:06:10 | 显示全部楼层
zzfei90 发表于 2012-12-3 16:35
我就是这么弄的,是用的ldr pc, =HandlerIRQ,就是不行
  1. Exception_Table
  2.     LDR     PC, Vect_RST
  3.     LDR     PC, Vect_UDef
  4.     LDR     PC, Vect_SWI
  5.     LDR     PC, Vect_PABT
  6.     LDR     PC, Vect_DABT
  7.     DCD     0x0
  8.     LDR     PC, Vect_IRQ
  9.     LDR     PC, Vect_FIQ

  10. Vect_RST    DCD     Code_RST
  11. Vect_UDef   DCD     Code_UDF
  12. Vect_SWI    DCD     Code_SWI
  13. Vect_PABT   DCD     Code_PAB
  14. Vect_DABT   DCD     Code_DAB
  15.             DCD     0x00000000
  16. Vect_IRQ    DCD     Code_IRQ
  17. Vect_FIQ    DCD     Code_FIQ
复制代码
用这样的,这是确定长度的描述方法。
LDR PC, =是变长多条指令。
具体看反汇编。

出0入0汤圆

 楼主| 发表于 2012-12-3 17:52:05 | 显示全部楼层
dr2001 发表于 2012-12-3 17:06
用这样的,这是确定长度的描述方法。
LDR PC, =是变长多条指令。
具体看反汇编。 ...

你好,我刚才在没开mmu的情况下把地址0以后1K内的内容通过串口发送到电脑上了,发现全是0,请问你知道为什么吗?

出0入0汤圆

 楼主| 发表于 2012-12-3 17:55:42 | 显示全部楼层
dr2001 发表于 2012-12-3 17:06
用这样的,这是确定长度的描述方法。
LDR PC, =是变长多条指令。
具体看反汇编。 ...

你好,我刚才在没开mmu的情况下把地址0以后1K内的内容通过串口发送到电脑上了,发现全是0,请问你知道为什么吗?

出0入0汤圆

发表于 2012-12-3 19:35:29 | 显示全部楼层
原因有很多……先查芯片手册,确认那里有RAM,然后尝试写一些数据然后发出来看看。
究竟是谁清空的……有可能是C运行库,折腾BSS或者什么的时候顺路干的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 15:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表