3957|7

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

googleman能否回答个问题?谢谢! [复制链接]

googleman你好,在论坛里看到你的帖子,请问个问题。
    是这样,我们的开发平台是优龙的pxa270,linux操作系统。现在想抛开操作系统在ads下调试一个外部gpio做按键进入中断的子程序。
    因为pxa270的sdram从0xa0000000开始,所以在程序中开了mmu,把0xa0000000映射到0x00000000,这样当中断到来时程序中的中断向量入口(IRQ)已被映射到0x00000018处,同时pc会到0x00000018这个地址找中断入口,进而跳到中断函数执行中断服务例程。(在ads里设置了RO为0xa0000000)
    但是现在的问题是在axd中,当使能了mmu后我的确在反汇编的窗口里看到了在0x00000018处有一句代码:“B 1114”,同时在0x1114处也可以看到放置了我的中断服务例程,可是通过设置断点发现在中断来时PC的确是跳到了0x00000018处,但之后却没有按照预想的跳到0x00001114处的中断服务程序,而是跳到0x00000038处,或是干脆从0x00000018处跑飞。
    我觉得我的mmu使用没有问题,因为我的确可以在mmu使能后的虚拟地址里写入数据,比方说在0x00000050处写一个数值“0xaaaa5555”,可以通过反汇编窗口看到0x00000050处的内容是0xaaaa5555,但是为什么PC在0x00000018处却不能按照地址里的内容正确跳转呢,搞了两周没找到问题,希望得到你的答复!
    谢谢!

最新回复

高手呀,GOOGLEMAIN  详情 回复 发表于 2009-12-18 20:16
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
GM的人气太高了,帮你顶!他会来的,耐心的等一下吧!
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
呵呵,不好意思。最近我比较忙,在学习6410 ,少来eeworld了。
PXA270 我没有用过,不过2440 我刚好也是用ADS bootloader

我的2440 是这样的 RO base 设置成0x30000000
并且MMU之后,把物理地址0映射到0x30000000
根据ARM的规定,中断向量表位置是0(默认,在ADS下使用这个)或者0xffff0000(wince下使用)
一旦发生中断,PC就会指向中断向量表,但是我们开了MMU,那么就会指向0/0xffff0000对应的虚拟地址。

我的就是跳到了0x30000000,(O(∩_∩)O哈哈哈~有些人把0映射成0就会不断复位。)

现在以你的PXA270 来看应该在0xa0000018才是你中断向量位置 绑定你的中断相关的函数才对,你看看是都对应上了。

还有中断栈啥的都要对应上。

good luck
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

4
 
http://www.armce.com/bbs/viewthread.php?tid=938&extra=

关于中断,我在这里做了一些说明
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 
等等,是我没弄清楚吧,是应该把物理地址0xA0000000映射到虚拟地址0x00000000呢,还是应该把物理地址0x00000000映射到虚拟地址0xA0000000呢?以下是代码里的映射关系,其实我用的是这一条映射
“cbSDRAM         0x00000000      0x03FFFFFF     0xA0000000       64Mb     111”
googleman的意思是不是需要把
“xxBOOTROM       0x04000000      0x05FFFFFF     0x00000000       32Mb     001”这条映射改为
“xxBOOTROM       0xA0000000      0x03FFFFFF     0x00000000       364Mb     111”,
是这样吗?


;**********************************************************************************/
;                                                                           Access
; Region          Virtual Start   Virtual End    Physical Start   Size    (cbx)
;
; cbSDRAM         0x00000000      0x03FFFFFF     0xA0000000       64Mb     111
; xxBOOTROM       0x04000000      0x05FFFFFF     0x00000000       32Mb     001
; xxBOOTALT       0x0600000       0x07FFFFFF     0x04000000       32Mb     001
; xxPlatformReg   0x08000000 *    0x080FFFFF     0x08000000        1Mb     000
; xxSRAM          0x5C000000 *    0x5C1FFFFF     0x5C000000        2Mb     001
; xxETHERNET      0x10000000 *    0x13FFFFFF     0x10000000       64Mb     000
; xxPCMCIA        0x20000000 *    0x3FFFFFFF     0x20000000      512Mb     000
; xxProcessorReg  0x40000000 *    0x4FFFFFFF     0x40000000      256Mb     000
; xxIntSDRAM      0x50000000 *    0x5FFFFFFF     0x50000000      256Kb     001
; cxSDRAM         0x60000000      0x63FFFFFF     0xA0000000       64Mb     101
; xxSDRAM         0xA0000000 *    0xA3FFFFFF     0xA0000000       64Mb     001
;
; * identity mapped
;
;**********************************************************************************/
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
看你代码是如何实现的了。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

7
 
我将0xa0000000映射为0x00000000,那么看起来中断向量表就在0x00000000开始的地方,来了中断就到0x18处(实际上对应于物理地址的0xa0000018)找入口,不是这样吗?
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
高手呀,GOOGLEMAIN
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表