9967|30

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

ARM中断问题,谁用过FreeScale的i.MX31,ADS1.2中,中断搞不定啊! [复制链接]

我用FreeScale的i.MX31(ARM11)做嵌入式系统,在WinCE下能使用中断,但是winCE初始化中断的代码是看不到的!
我在ADS1.2中做BootLoader,中断调不出来!发生中断时,没有自动跳转到中断向量那里去。

1、CP15中VE(Bit24)置0, V( Bit13)置0,即中断向量放在0地址。并且中断向量在对应地址都安排好了。
(所有中断向量都放了1条指令:跳转到本身地址,即死循环,这样当发生中断时,查看pc值就知道了)
2、SPSR的F(Bit6)和I(Bit7)都置0,即允许IRQ和FIQ
3、每个运行模式的栈都设置了。最后模式设为系统模式(管理模式也试过)

我用Timer2测试(中断号为27),CPU的AVIC(ARM Vector Interrupt controller)如下设置
(1)INTCNTL设为0,允许Normal Interrupt和Fast Interrupt
(2)NIMASK默认0x1F,即不屏蔽任何中断
(3)ENNUM写27(INTENABLEL自动会设置为0x08000000,表示允许27号中断)
(4)INTTYPEH和INTTYPEL都为0,表示所有中断都当作普通中断
(5)NIPRIORITY3设置为0x0000F000,27号中断优先级为15,最高优先级
(6)Timer2模块中,计数器、比较计数器、中断允许都设置好了。我设置为3秒钟之后产生中断

等待3秒后,Timer2模块中中断标识发生了,AVIC中Pending(未决中断)寄存器对应位置位了,但就是没跳转到0x18处。
我设置了断点在0x18处,也没见跳转到那里????

我将所有中断改为FIQ,也没有跳转。

如果我故意去访问无效的地址,那么引起Data Abort时能自动跳到0x10处死循环!用SWI指令也能跳转到0x08处。
就是我用正常中断不能正常跳转过去!!!! 我改用KeyPad按键中断,当按键时,AVIC中Pending也有对应位置位了,但仍旧不能跳转到中断向量那里去?

我之前在ADS1.2中调试出来过ARM10的PXA270的中断,因此编译器应该不是问题。
是我哪里设置的不对? 还是另有地方我没有做到?
各位大侠,有谁做过i.MX31的中断,请给指导一下。
此帖出自ARM技术论坛

最新回复

还没搞定! 不过这么久了,还是结贴吧,谢谢各位的关注。 现在在忙别的任务,过几天再搞这个问题。  详情 回复 发表于 2010-2-24 12:01
点赞 关注
 

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
iMX31很强吧,没用过,帮顶。
此帖出自ARM技术论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
i.MX31还可以,多媒体能力比较强。不过现在FreeScale出的MX51才叫牛叉!!!
此帖出自ARM技术论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 
中断向量表在哪里?
MMU映射对了吗?试试映射到reset 看看是否会中断到reset
此帖出自ARM技术论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 
中断向量表放在0(DDRRAM的首地址,经过MMU后映射到0地址)。
7个向量都有, 如下,做成死循环是在测试,看有没有跳转过来

Vector_Table
Reset           B  Reset
Undef_Instruct  B  Undef_Instruct  
SWI             B  SWI            
Prefetch_Abort  B  Prefetch_Abort
Data_Abort      B  Data_Abort
Reserved_IRQ    B  Reserved_IRQ
IRQ             B  IRQ
FIQ             B  FIQ
此帖出自ARM技术论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
关注这个帖子
此帖出自ARM技术论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

7
 
应该是与ADS代码的链接定位有关。一般IRQ的跳转地址是RO基地址+0x18.
不知道LZ有没有使用分散加载,或者是其他设置。
此帖出自ARM技术论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 ljdtj 的回复:
应该是与ADS代码的链接定位有关。一般IRQ的跳转地址是RO基地址+0x18.
不知道LZ有没有使用分散加载,或者是其他设置。


中断地址是一个固定地址,一般是0x18,怎么会和RO有关系呢。


楼主可以查看一下你的0地址处的代码,程序运行后看一下,不要直接看AXD下显示的文件,而是查看0地址处的内存数据,确保一下这段内容是正确的,另外是否还有某些中断屏蔽位等没设置呢?
此帖出自ARM技术论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

9
 
mark
此帖出自ARM技术论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 7 楼 veabol 的回复:
引用 6 楼 ljdtj 的回复:
应该是与ADS代码的链接定位有关。一般IRQ的跳转地址是RO基地址+0x18.
不知道LZ有没有使用分散加载,或者是其他设置。


中断地址是一个固定地址,一般是0x18,怎么会和RO有关系呢。


楼主可以查看一下你的0地址处的代码,程序运行后看一下,不要直接看AXD下显示的文件,而是查看0地址处的内存数据,确保一下这段内容是正确的,另外是否还有某些中断屏蔽位等没设置呢?


看来是我以前的理解错了。
多谢韦伯大哥指正。
此帖出自ARM技术论坛
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 7 楼 veabol 的回复:
引用 6 楼 ljdtj 的回复:
应该是与ADS代码的链接定位有关。一般IRQ的跳转地址是RO基地址+0x18.
不知道LZ有没有使用分散加载,或者是其他设置。


中断地址是一个固定地址,一般是0x18,怎么会和RO有关系呢。


楼主可以查看一下你的0地址处的代码,程序运行后看一下,不要直接看AXD下显示的文件,而是查看0地址处的内存数据,确保一下这段内容是正确的,另外是否还有某些中断屏蔽位等没设置呢?


谢谢提醒! 
我有JTAG调试器,在加载二进制代码运行后,可以通过JTAG查看现在的PC,现在的各个地址的内容,确认0地址处放的是中断向量表!我故意访问错误的地址,DataAbort中断会发生,会自动跳转到0x10处!用SWI指令产生软中断,也可以自动跳转到0x08处!就是用普通的IRQ中断不会自动跳转,我用了Timer和Key中断都试过!CPU的中断控制器在发生中断之前正常,发生中断后标识中断源的寄存器NIVECSR有标识哪个中断以及对应的优先级,中断源寄存器INTSRC也有对应的位置位,中断未决寄存器Pending也有对应的位置位,但就是没跳转到中断向量那里!
我也在怀疑有什么地方还没配置好,但对于中断控制器来说,寄存器就那么几个,全部都对照过了。
不知道还有谁用过i.MX31?
此帖出自ARM技术论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

12
 
没接触过i.MX31,无能为力了
此帖出自ARM技术论坛
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 11 楼 veabol 的回复:
没接触过i.MX31,无能为力了


不管怎么样,都谢谢你!

继续研究中......
此帖出自ARM技术论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

14
 
这是i.MX31的DataSheet,请有空的朋友帮我看看!谢谢

http://download.eeworld.net/source/2020711
此帖出自ARM技术论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

15
 
自己顶一下
此帖出自ARM技术论坛
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

16
 
可怜的村长啊,下班临走前再帮你顶下吧!
此帖出自ARM技术论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 15 楼 veabol 的回复:
可怜的村长啊,下班临走前再帮你顶下吧!


谢谢,又一晚上,还是没结果
此帖出自ARM技术论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

18
 
应该都有相同点
中断栈设置好了?
中断服务函数绑定好了?
MMU映射哪里了?
寄存器设置正确了?
此帖出自ARM技术论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

19
 
引用 17 楼 gooogleman 的回复:
应该都有相同点
中断栈设置好了?
中断服务函数绑定好了?
MMU映射哪里了?
寄存器设置正确了?



几种模式下的栈都设置过了!再说我暂时只需要跳到IRQ中断向量处,然后就故意死循环了!它还没跳过去。
MMU映射了,特意将DDR RAM映射到0地址的,RAM的最前面就是放的测试代码,其中0-0x20是中断向量
寄存器方面,自己好像认为设置完了,但不知道有没有漏的,因此在13楼我链接了i.MX31的资料,希望有时间的大侠能帮我看看关于AVIC这一章有什么我设置漏了? 或者是ARM内核层还有什么没有设置好?
此帖出自ARM技术论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

20
 
看来,需要将这个资料仔细梳理一遍了,看有什么地方有关的。
这是个大工程啊
此帖出自ARM技术论坛
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表