这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 开中断 就跑飞

共10条 1/1 1 跳转至

开中断 就跑飞

菜鸟
2006-03-16 01:59:02     打赏

请教:开中断就跑飞
s3c44b0de板子,硬件软件以前都调好了,我拿来跑一遍程序。关中断,顺序执行都好好的;开中断就跑飞,在
rINTMSK =~(BIT_GLOBAL|BIT_EINT2);开中断代码处就跑飞了。
查中断地址,
void __irq frame_isr(void)中断函数入口地址frame_isr为0x0c00,8e80

pISR_EINT2 = (unsigned)frame_isr;
#define pISR_EINT2 (*(unsigned *) (_ISR_STARTADDRESS+0x7c))
#define _ISR_STARTADDRESS 0xc7fff00 //GCS6:64M DRAM/SDRAM
查0x0c7fff7c地址处值为0x0c00,8e80

查中断向量入口
VECTOR_BRANCH
ldr pc,=HandlerEINT0 ;mGA H/W interrupt vector table
ldr pc,=HandlerEINT1 ;
ldr pc,=HandlerEINT2 ;
反汇编:
VECTOR_BRANCH [0xe59ff0bc] ldr pc,0x0c0000e4 ; = #0x0c000438
0c000024 [0xe59ff0bc] ldr pc,0x0c0000e8 ; = #0x0c000420
0c000024 [0xe59ff0bc] ldr pc,0x0c0000ec ; = #0x0c000408
0x0c0000ec 处的值为
0x0c0000ec [0x0c000408] dcd 0x0c000408 ....

??是不是发生中断 中断向量就没有跳到中断函数执行?(用armmul软件仿真也得到上面结果)
初始化代码 就是samsung开发板源码,硬件调过的,实在搞不懂




关键词: 中断     就跑    

菜鸟
2006-03-16 02:59:00     打赏
2楼

关键是OX00000000地址有没有中断向量。FLASH有没有烧boot。0c000024这个地方的中断向量没用的。


菜鸟
2006-03-16 21:56:00     打赏
3楼

我只是在ram里调试,也需要烧boot吗


菜鸟
2006-03-16 22:48:00     打赏
4楼

我今天又看了反汇编
b ResetHandler ;for debug
b HandlerIRQ
b HandlerFIQ
在0x0c000018处[0xea000052] b HandlerIRQ
HandlerIRQ处
[0xe24dd004] sub r13,r13,#4
[0xe92d0001] stmfd r13!,{r0}
[0xe59f0480] ldr r0,0x0c0005f8 ; = #0x0c7fff18
[0xe5900000] ldr r0,[r0,#0]
[0xe58d0004] str r0,[r13,#4]
[0xe8bd8001] ldmfd r13!,{r0,pc}

0x0c0005f8 处为[0x0c7fff18] dcd 0x0c7fff18 ....
0x0c7fff18 处为一些中断函数地址

现在我搞不懂 发生中断后 有没有跳到 b HandlerIRQ 我设置断点也没用

在ram里 调程序 需要在flash里烧写boot吗


菜鸟
2006-03-16 22:49:00     打赏
5楼
在RAM里面调试,不需要BOOT程序。但有一个问题,如果你在FLASH里面没有放置相应的跳转指令的话,有中断产生的时候,程序就不知道跑到那里去了。请确保没有中断产生,然后把中断打开,应该就不会跑飞了。

菜鸟
2006-03-16 23:35:00     打赏
6楼

"在ram里 调程序 需要在flash里烧写boot吗"

我认为如果调试中断,就应该在FLASH中写入BOOT(boot中包含中断向量表和发生中断时跳转到应用级ISR的处理),而且boot程序中的_ISR_STARTADDRESS定义(在option.h)应该和你调试的应用程序中的定义一致。

我想不管应用程序在RAM运行、还是在FLASH运行、还是用AXD调试,发生中断时CPU都会跳转到0x00000000开始的硬中断向量表(其中IRQ中断向量在0x00000018)。

不会到0x0c000018地址的。

这是我在实践中得到的结果。不知看法是否正确,请高手指教。


菜鸟
2006-03-16 23:44:00     打赏
7楼

同意DLD2的看法,如果要调试中断的话,肯定是需要在地址0X0放置中断向量表的。如果调试的程序和异常处理无关的话,可以不管。


菜鸟
2006-03-17 19:24:00     打赏
8楼

你可以用查询的方式进入中断程序,找找问题


菜鸟
2006-03-19 09:31:00     打赏
9楼

请问搂主问题解决了吗?是怎么解决的?我也遇到类似问题。

请问dld2,如何放置中断向量表?

谢谢!


菜鸟
2006-03-19 21:23:00     打赏
10楼

如果有boot,就把boot重新烧一下。

如果没有,自己写一个。

最简单的boot就是汇编的初始化程序不变,在main()里面只有一个while(1);

我的boot中有搬移程序,将应用从FLASH搬移到SDRAM。

注意:boot工程中的RO-BASE应该设置为0x0。


共10条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]