打印

lpc2129程序跑飞!!!!!!!!!!!

[复制链接]
3428|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
c67890|  楼主 | 2010-4-13 11:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠,我的板子是自己做的,用keil+u-link2调试程序走到0x1c地址就在执行就飞了,下面是程序跑飞的代码位置:
程序复位:  
246: Vectors         LDR     PC, Reset_Addr         
0x00000000  E59F4034  LDR       R4,[PC,#0x0034]
   247:                 LDR     PC, Undef_Addr
0x00000004  E3A05002  MOV       R5,#0x00000002
   248:                 LDR     PC, SWI_Addr
0x00000008  E5845000  STR       R5,[R4]
   249:                 LDR     PC, PAbt_Addr
0x0000000C  E3A05003  MOV       R5,#0x00000003
   250:                 LDR     PC, DAbt_Addr
0x00000010  E5845004  STR       R5,[R4,#0x0004]
   251:                 NOP                            ; Reserved Vector  
0x00000014  E59F201C  LDR       R2,[PC,#0x001C]
   252:                 LDR     PC, IRQ_Addr
0x00000018  E3A03000  MOV       R3,#0x00000000
   253:                 LDR     PC, [PC, #-0x0FF0]     ; Vector from VicVectAddr
0x0000001C  E1020093  SWP       R0,R3,[R2]
   254:                 LDR     PC, FIQ_Addr
   255:  
   256: Reset_Addr      DCD     Reset_Handler
   257: Undef_Addr      DCD     Undef_Handler
   258: SWI_Addr        DCD     SWI_Handler
   259: PAbt_Addr       DCD     PAbt_Handler
   260: DAbt_Addr       DCD     DAbt_Handler
   261:                 DCD     0                      ; Reserved Address  
   262: IRQ_Addr        DCD     IRQ_Handler
   263: FIQ_Addr        DCD     FIQ_Handler
   程序就在上面的0x0000001c之后跑飞,跳到一个0x7ffffe2d8的位置,希望大家帮我解决一下这个问题,谢谢各位了!!!!

相关帖子

沙发
c67890|  楼主 | 2010-4-13 11:56 | 只看该作者
各位大侠帮帮忙啊

使用特权

评论回复
板凳
tiger1125| | 2010-4-13 13:48 | 只看该作者
你的这段启动代码是参考周立功的吧,
看你的代码的执行情况应该是进入IRQ中断了。
LDR     PC, [PC, #-0x0FF0]     ; Vector from VicVectAddr
这段的意思是从VicVectAddr这个寄存器中读取IRQ中断程序的入口地址,然后执行IRQ中断程序。
所以要配置好这个寄存器才可以实现正常的中断服务。
例如,你开放了EXIT的外部中断,中断服务程序的函数为__irq EXIT0();
那么你要把这个函数的地址赋值给VicVectAddr,这样在EXIT中断发生后,才能正确跳转到EXIT0();函数中。

-----Tiger

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
c67890 + 1
地板
c67890|  楼主 | 2010-4-13 15:16 | 只看该作者
楼上的大侠,小弟的程序没有中断函数的,我把你说的那句代码(LDR     PC, [PC, #-0x0FF0]     ; Vector from VicVectAddr )注释了,结果还是程序从0x1c的位置跑飞。如果我要想不让程序跳到IRQ模式,应该怎么办呢?请多指教。

使用特权

评论回复
5
c67890|  楼主 | 2010-4-13 15:32 | 只看该作者
楼上的大侠,小弟的程序没有中断函数的,我把你说的那句代码(LDR     PC, [PC, #-0x0FF0]     ; Vector from VicVectAddr )注释了,结果还是程序从0x1c的位置跑飞。如果我要想不让程序跳到IRQ模式,应该怎么办呢?请多指教。

使用特权

评论回复
6
c67890|  楼主 | 2010-4-13 15:33 | 只看该作者
5# c67890

使用特权

评论回复
7
c67890|  楼主 | 2010-4-13 15:33 | 只看该作者
4# c67890
楼上的大侠,小弟的程序没有中断函数的,我把你说的那句代码(LDR     PC, [PC, #-0x0FF0]     ; Vector from VicVectAddr )注释了,结果还是程序从0x1c的位置跑飞。如果我要想不让程序跳到IRQ模式,应该怎么办呢?请多指教。

使用特权

评论回复
8
XZL| | 2010-4-14 09:29 | 只看该作者
呵呵,周立功的DEMO用在KIEL中需要修改!不让程序跳到IRQ模式,你要看DATASHEET我忘记了。

使用特权

评论回复
9
XZL| | 2010-4-14 09:31 | 只看该作者
在KIEL中自动建立的启动代码应该就可以的

使用特权

评论回复
10
c67890|  楼主 | 2010-4-14 14:18 | 只看该作者
谢谢各位大侠了,小弟的程序跑飞问题已经解决了:我的lpc2129的p0.14接了个三极管9014的第一引脚(c极),9014的发射极接地。这样的结果就是,jtag可以正常发现和下载程序,但是程序一运行就默认进如isp模式,jtag无法跟踪,所以调试的结果就是到0x1c位置跑飞。
我的更改方法:将p0.14引脚接10k电阻上拉到3.3v,断开与9014的连接。这样程序就可以正常运行了。

谢谢各位的帮忙,也希望我的经历可以给遇到问题的朋友一些帮助。
                                                              ----c67890

使用特权

评论回复
11
tiger1125| | 2010-4-16 16:59 | 只看该作者
回复后就没有来看这个帖子了,Sorry,来晚了……
问题解决了就好
感谢lz的经验分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

34

帖子

1

粉丝