天嵌 ARM开发社区

 找回密码
 注册
查看: 2459|回复: 1

6410 中断问题

[复制链接]
A.W. 发表于 2012-4-15 22:17:23 | 显示全部楼层 |阅读模式
搞了好几天,一直搞不定,向大家求救!请帮忙:

我要在TQ6410裸机上接管中断服务,从Nand Flash启动,在不擦除U-Boot的情况下,把我的代码下载到RAM,请问如何接管 IRQ中断?

我尝试过以下办法,行不通,为什么 ?
1) 我跟踪0x00000018处的IRQ入口,发现它跳到0x00000084处执行,反编译那里的代码如下:
          SUB  R13,R13,#4
          STMFD R13!,{R0}
           LDR  R0,[R15,#0x25C]  ;=[0x000002F0] ->0x0C001FF8
           LDR  R0,[R0]    ;=[0x0C001FF8] ->0xE5854010
           STR  R0,[R13,#4]
           LDMFD R13!,{R0,PC}
看起来好像U-Boot在0x000002F0处保存了一个地址0x0C001FF8,而地址0x0C001FF8这里又保存了最后的IRQ函数处理入口,由于0x00000018 , 0x00000084 , 0x000002F0处都是Flash地址 ,我不打算改变U Boot原代码,以免下次启动错误,所以我打算修改SRAM处0x0C001FF8的内容,把它的内容改为我的IRQ函数地址,然后开启了一个RTC定时器中断,每隔1秒定时器中断一次,闪烁LED灯,串口打印信息,运行的时候却发现,开机LED流水灯闪烁,然后从串口输出欢迎信息,表明程序已经启动,但是接下来开启中断后大约3秒钟,板子没动静了,灯也不闪,串口也没动静,应该是中断已经发生,然后跑飞了。通过串口打印0x0C001FF8的内容发现,我的IRQ处理函数地址已经被正确填写在那里,但是就是不行,为什么?PC跑到哪里去了?我该怎么办 ?我的代码是通过U Boot的选项7下载到RAM里0xC0000000地址处的,中断服务函数的地址是0xC00005F8,代码如下:
void __irq HandlerIRQ(void)
{

volatile unsigned int value_VIC0_IRQSTATUS=VIC0_IRQSTATUS;
startled();

if(value_VIC0_IRQSTATUS & (1<<2))
{
  _isr_timer();  
}

uart0_print("irq: VIC0_IRQSTATUS=%X\n",VIC0_IRQSTATUS);
return;
}

2)我尝试过另外一种方法来接管中断,即往VICxADDR寄存器处写IRQ服务函数地址,CP15也操作了,也不成功,请问是为什么?

 楼主| A.W. 发表于 2012-4-17 21:52:52 | 显示全部楼层
自己顶一下,看看有没有人能够解决!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-19 07:22 , Processed in 1.031250 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表