zzfei90 发表于 2012-12-3 15:47:44

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

如题,当发生中断时,如果没有初始化mmu的话,程序PC指针会被强制批向何处?

dr2001 发表于 2012-12-3 15:59:55

2440是ARM920T内核,无论是否初始化MMU,出现中断后,ARM Core都会在固定的地址执行中断向量。
地址有两个,一个是0x0000_0000,IRQ的话有对应的偏移;如果在CP15配置了高地址,好像地址是0xFFFF_0000的。
开了MMU只是数据从哪个物理地址提取了。

zzfei90 发表于 2012-12-3 16:16:47

dr2001 发表于 2012-12-3 15:59 static/image/common/back.gif
2440是ARM920T内核,无论是否初始化MMU,出现中断后,ARM Core都会在固定的地址执行中断向量。
地址有两个 ...

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

dr2001 发表于 2012-12-3 16:32:06

不开MMU自己把向量复制过去就行,如果对应地址没有存储器,就必须开MMU,这个没办法。
特别注意,向量用LDR PC这样的指令格式,普通跳转有地址范围限制。

zzfei90 发表于 2012-12-3 16:35:44

dr2001 发表于 2012-12-3 16:32 static/image/common/back.gif
不开MMU自己把向量复制过去就行,如果对应地址没有存储器,就必须开MMU,这个没办法。
特别注意,向量用LDR ...

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

dr2001 发表于 2012-12-3 17:06:10

zzfei90 发表于 2012-12-3 16:35 static/image/common/back.gif
我就是这么弄的,是用的ldr pc, =HandlerIRQ,就是不行

Exception_Table
    LDR   PC, Vect_RST
    LDR   PC, Vect_UDef
    LDR   PC, Vect_SWI
    LDR   PC, Vect_PABT
    LDR   PC, Vect_DABT
    DCD   0x0
    LDR   PC, Vect_IRQ
    LDR   PC, Vect_FIQ

Vect_RST    DCD   Code_RST
Vect_UDef   DCD   Code_UDF
Vect_SWI    DCD   Code_SWI
Vect_PABT   DCD   Code_PAB
Vect_DABT   DCD   Code_DAB
            DCD   0x00000000
Vect_IRQ    DCD   Code_IRQ
Vect_FIQ    DCD   Code_FIQ
用这样的,这是确定长度的描述方法。
LDR PC, =是变长多条指令。
具体看反汇编。

zzfei90 发表于 2012-12-3 17:52:05

dr2001 发表于 2012-12-3 17:06 static/image/common/back.gif
用这样的,这是确定长度的描述方法。
LDR PC, =是变长多条指令。
具体看反汇编。 ...

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

zzfei90 发表于 2012-12-3 17:55:42

dr2001 发表于 2012-12-3 17:06 static/image/common/back.gif
用这样的,这是确定长度的描述方法。
LDR PC, =是变长多条指令。
具体看反汇编。 ...

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

dr2001 发表于 2012-12-3 19:35:29

原因有很多……先查芯片手册,确认那里有RAM,然后尝试写一些数据然后发出来看看。
究竟是谁清空的……有可能是C运行库,折腾BSS或者什么的时候顺路干的。
页: [1]
查看完整版本: s3c2440中断后pc指针被强制指向何处